[C#] 제출 버튼을 누른 MVC

내 MVC 양식에 두 개의 버튼이 있습니다.

<input name="submit" type="submit" id="submit" value="Save" />
<input name="process" type="submit" id="process" value="Process" />

내 컨트롤러 작업에서 어떤 것을 눌렀는지 어떻게 알 수 있습니까?



답변

제출 버튼 이름을 동일하게 지정

<input name="submit" type="submit" id="submit" value="Save" />
<input name="submit" type="submit" id="process" value="Process" />

그런 다음 컨트롤러에서 제출 가치를 얻으십시오. 클릭 한 버튼 만 해당 값을 전달합니다.

public ActionResult Index(string submit)
{
    Response.Write(submit);
    return View();
}

물론 스위치 블록으로 다른 작업을 수행하기 위해 해당 값을 평가할 수 있습니다.

public ActionResult Index(string submit)
{
    switch (submit)
    {
        case "Save":
            // Do something
            break;
        case "Process":
            // Do something
            break;
        default:
            throw new Exception();
            break;
    }

    return View();
}


답변

<input name="submit" type="submit" id="submit" value="Save" />
<input name="process" type="submit" id="process" value="Process" />

그리고 컨트롤러 작업에서 :

public ActionResult SomeAction(string submit)
{
    if (!string.IsNullOrEmpty(submit))
    {
        // Save was pressed
    }
    else
    {
        // Process was pressed
    }
}


답변

이것은 더 나은 답변이므로 버튼의 텍스트와 값을 모두 가질 수 있습니다.

http://weblogs.asp.net/dfindley/archive/2009/05/31/asp-net-mvc-multiple-buttons-in-the-same-form.aspx

</p>
<button name="button" value="register">Register</button>
<button name="button" value="cancel">Cancel</button>
</p>

컨트롤러 :

public ActionResult Register(string button, string userName, string email, string password, string confirmPassword)
{
if (button == "cancel")
    return RedirectToAction("Index", "Home");
...

간단히 말해 SUBMIT 버튼이지만 name 속성을 사용하여 이름을 선택하면 컨트롤러 메소드 매개 변수의 name submit 또는 버튼을 의무적으로 사용하지 않으므로 원하는대로 호출 할 수 있습니다 …


답변

아래와 같이 이름표에서 버튼을 식별 할 수 있습니다. 컨트롤러에서 이와 같이 확인해야합니다.

if (Request.Form["submit"] != null)
{
//Write your code here
}
else if (Request.Form["process"] != null)
{
//Write your code here
}


답변

다음은 커스텀 MultiButtonAttribute를 사용하여 지시를 따르기 매우 쉽고 좋은 방법입니다.

http://blog.maartenballiauw.be/post/2009/11/26/Supporting-multiple-submit-buttons-on-an-ASPNET-MVC-view.aspx

요약하면 제출 버튼을 다음과 같이 만드십시오.

<input type="submit" value="Cancel" name="action" />
<input type="submit" value="Create" name="action" /> 

이 같은 행동 :

[HttpPost]
[MultiButton(MatchFormKey="action", MatchFormValue="Cancel")]
public ActionResult Cancel()
{
    return Content("Cancel clicked");
}

[HttpPost]
[MultiButton(MatchFormKey = "action", MatchFormValue = "Create")]
public ActionResult Create(Person person)
{
    return Content("Create clicked");
} 

그리고이 클래스를 만드십시오 :

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class MultiButtonAttribute : ActionNameSelectorAttribute
{
    public string MatchFormKey { get; set; }
    public string MatchFormValue { get; set; }

    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
    {
        return controllerContext.HttpContext.Request[MatchFormKey] != null &&
            controllerContext.HttpContext.Request[MatchFormKey] == MatchFormValue;
    }
}


답변

// Buttons
<input name="submit" type="submit" id="submit" value="Save" />
<input name="process" type="submit" id="process" value="Process" />

// Controller
[HttpPost]
public ActionResult index(FormCollection collection)
{
    string submitType = "unknown";

    if(collection["submit"] != null)
    {
        submitType = "submit";
    }
    else if (collection["process"] != null)
    {
        submitType = "process";
    }

} // End of the index method


답변

더 쉽게하기 위해 버튼을 다음과 같이 변경할 수 있다고 말합니다.

<input name="btnSubmit" type="submit" value="Save" />
<input name="btnProcess" type="submit" value="Process" />

컨트롤러 :

public ActionResult Create(string btnSubmit, string btnProcess)
{
    if(btnSubmit != null)
       // do something for the Button btnSubmit
    else
       // do something for the Button btnProcess
}