Nice programing

여러 제출 버튼이있는 MVC 면도기 양식?

nicepro 2020. 12. 13. 11:07
반응형

여러 제출 버튼이있는 MVC 면도기 양식?


Razor 뷰에는 폼 안에 3 개의 버튼이 있습니다. 모든 버튼의 작업에는 기본적으로 입력 필드에 오는 값인 양식 값이 필요합니다.

버튼을 클릭 할 때마다 기본 동작으로 리디렉션되었습니다. 버튼 누름에 따라 다른 작업에 양식을 제출하는 방법을 안내해 주시겠습니까?

시간과 안내, 도움에 정말 감사드립니다.


다음을 시도해 볼 수도 있습니다.

<input type="submit" name="submitbutton1" value="submit1" />
<input type="submit" name="submitbutton2" value="submit2" />

그런 다음 기본 함수에서 원하는 함수를 호출합니다.

if( Request.Form["submitbutton1"] != null)
{
    // Code for function 1
}
else if(Request.Form["submitButton2"] != null )
{
    // code for function 2
}

이 우아한 솔루션은 여러 제출 버튼에 적용됩니다.

@Html.Begin()
{
  // Html code here
  <input type="submit" name="command" value="submit1" />
  <input type="submit" name="command" value="submit2" />

}

그리고 컨트롤러의 작업 방법에서 매개 변수로 수락하십시오.

public ActionResult Create(Employee model, string command)
{
    if(command.Equals("submit1"))
    {
      // Call action here...
    }
    else
    {
      // Call another action here...
    }
}

보기에

<form action="/Controller_name/action" method="Post>

 <input type="submit" name="btn1" value="Ok" />
 <input type="submit" name="btn1" value="cancel" />
 <input type="submit" name="btn1" value="Save" />
</form>

행동에

string str =Request.Params["btn1"];
if(str=="ok"){


}
if(str=="cancel"){


}
if(str=="save"){


}

JS + Ajax를 사용할 수 있습니다. 예를 들어 버튼이있는 경우 클릭 이벤트에서 수행해야하는 작업을 말할 수 있습니다. 여기에 코드 :

 <input id="btnFilterData" type="button" value="myBtn">

html로 된 버튼 : 스크립트 섹션에서 다음 코드를 사용해야합니다 (이 섹션은 문서의 끝에 있어야합니다).

<script type="text/javascript">
$('#btnFilterData').click(function () {
    myFunc();
});
</script>

마지막으로 ajax 함수를 추가해야합니다 (문서 시작 부분에 배치해야하는 다른 스크립트 섹션에서).

function myFunc() {
    $.ajax({
        type: "GET",
        contentType: "application/json",
        url: "/myController/myFuncOnController",
        data: {
             //params, which you can pass to yu func
        },
        success: function(result) {

        error: function (errorData) {

        }
    });
};

내가 찾은 가장 깨끗한 솔루션은 다음과 같습니다.

이 예는 매우 다른 두 가지 작업을 수행하는 것입니다. 기본 전제는 값을 사용하여 데이터를 작업에 전달하는 것입니다.

귀하의 관점에서 :

@using (Html.BeginForm("DliAction", "Dli", FormMethod.Post, new { id = "mainForm" }))
{
    if (isOnDli)
    {
        <button name="removeDli" value="@result.WeNo">Remove From DLI</button>
    }
    else
    {
        <button name="performDli" value="@result.WeNo">Perform DLI</button>
    }
}

그런 다음 귀하의 행동에서 :

    public ActionResult DliAction(string removeDli, string performDli)
    {
        if (string.IsNullOrEmpty(performDli))
        {
            ...
        }
        else if (string.IsNullOrEmpty(removeDli))
        {
            ...
        }

        return View();
    }

이 코드는 테마에 따라 변형을 달성하기 위해 쉽게 변경할 수 있어야합니다. 예를 들어 버튼의 이름을 동일하게 변경하면 아래에서 볼 수 있듯이 액션 등에 대해 하나의 매개 변수 만 필요합니다.

귀하의 관점에서 :

@using (Html.BeginForm("DliAction", "Dli", FormMethod.Post, new { id = "mainForm" }))
{

        <button name="weNo" value="@result.WeNo">Process This WeNo</button>

        <button name="weNo" value="@result.WeNo">Process A Different WeNo This Item</button>
}

그런 다음 귀하의 행동에서 :

    public ActionResult DliAction(string weNo)
    {
        // Process the weNo...

        return View();
    }

보기에서 각 버튼을 자체 양식으로 래핑 해보세요.

  @using (Html.BeginForm("Action1", "Controller"))
  {
    <input type="submit" value="Button 1" />
  }

  @using (Html.BeginForm("Action2", "Controller"))
  {
    <input type="submit" value="Button 2" />
  }

일반 버튼 (제출 불가)을 사용할 수 있습니다. 자바 스크립트를 사용하여 ( 'onclick'이벤트에서) 양식의 'action'속성을 원하는 항목으로 재 작성한 다음 제출하십시오. 사용자 지정 도우미를 사용하여 버튼을 생성합니다 (프로젝트 루트의 App_Code 폴더에 "Helper.cshtml"파일 생성).

@helper SubmitButton(string text, string controller,string action)
{   
    var uh = new System.Web.Mvc.UrlHelper(Context.Request.RequestContext);
    string url = @uh.Action(action, controller, null);   
    <input type=button  onclick="(
                                       function(e)
                                                 {
                                                   $(e).parent().attr('action', '@url'); //rewrite action url
                                                   //create a submit button to be clicked and removed, so that onsubmit is triggered
                                                   var form = document.getElementById($(e).parent().attr('id'));
                                                   var button = form.ownerDocument.createElement('input');
                                                   button.style.display = 'none';
                                                   button.type = 'submit';
                                                   form.appendChild(button).click(); 
                                                   form.removeChild(button);              
                                                  }
                                      )(this)" value="@text"/>
}

그런 다음 다음과 같이 사용하십시오.

@Helpers.SubmitButton("Text for 1st button","ControllerForButton1","ActionForButton1")
@Helpers.SubmitButton("Text for 2nd button","ControllerForButton2","ActionForButton2")
...

양식 내부.


가장 간단한 방법은 html5를 사용 FormAction하고FormMethod

<input type="submit" 
           formaction="Save"
           formmethod="post" 
           value="Save" />
    <input type="submit"
           formaction="SaveForLatter"
           formmethod="post" 
           value="Save For Latter" />
    <input type="submit"
           formaction="SaveAndPublish"
           formmethod="post"
           value="Save And Publish" />

[HttpPost]
public ActionResult Save(CustomerViewModel model) {...}

[HttpPost]
public ActionResult SaveForLatter(CustomerViewModel model){...}

[HttpPost]
public ActionResult SaveAndPublish(CustomerViewModel model){...}

우리가 사용할 수있는 다른 많은 방법이 있습니다.이 문서를 참조하십시오. ASP.Net MVC 여러 제출 단추를 다른 방법으로 사용


이것이 나를 위해 일한 것입니다.

formaction="@Url.Action("Edit")"

스 니펫 :

 <input type="submit" formaction="@Url.Action("Edit")" formmethod="post" value="Save" class="btn btn-primary" />

<input type="submit" formaction="@Url.Action("PartialEdit")" formmethod="post" value="Select Type" class="btn btn-primary" />

 [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit( Quote quote)
        {
           //code 
       }
 [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult PartialEdit(Quote quote)
        {
           //code
        }

선택자를 사용하거나 클라이언트 스크립트를 사용하는 한 가지 방법 대신 두 가지 다른 작업 방법을 원하는 사람에게 도움이 될 수 있습니다.


This answer will show you that how to work in asp.net with razor, and to control multiple submit button event. Lets for example we have two button, one button will redirect us to "PageA.cshtml" and other will redirect us to "PageB.cshtml".

@{
  if (IsPost)
    {
       if(Request["btn"].Equals("button_A"))
        {
          Response.Redirect("PageA.cshtml");
        }
      if(Request[&quot;btn"].Equals("button_B"))
        {
          Response.Redirect(&quot;PageB.cshtml&quot;);
        }
  }
}
<form method="post">
   <input type="submit" value="button_A" name="btn"/>;
   <input type="submit" value="button_B" name="btn"/>;          
</form>


In case you're using pure razor, i.e. no MVC controller:

<button name="SubmitForm" value="Hello">Hello</button>
<button name="SubmitForm" value="World">World</button>
@if (IsPost)
{
    <p>@Request.Form["SubmitForm"]</p>
}

Clicking each of the buttons should render out Hello and World.


Didn't see an answer using tag helpers (Core MVC), so here it goes (for a delete action):

On HTML:

<form action="" method="post" role="form">
<table>
@for (var i = 0; i < Model.List.Count(); i++)
{
    <tr>
        <td>@Model.List[i].ItemDescription</td>
        <td>
            <input type="submit" value="REMOVE" class="btn btn-xs btn-danger" 
             asp-controller="ControllerName" asp-action="delete" asp-route-idForDeleteItem="@Model.List[i].idForDeleteItem" />
        </td>
    </tr>
}
</table>
</form>

On Controller:

[HttpPost("[action]/{idForDeleteItem}"), ActionName("Delete")]
public async Task<IActionResult> DeleteConfirmed(long idForDeleteItem)
{
    ///delete with param id goes here
}

Don't forget to use [Route("[controller]")] BEFORE the class declaration - on controller.

참고URL : https://stackoverflow.com/questions/19650345/mvc-razor-form-with-multiple-different-submit-buttons

반응형