In asp.net MVC you can submit a form by @using(Html.BeginForm()). You can Post the model you have bound via this operation and command the beginning form to post to a Post action:
@using(Html.BeginForm("Create","FooController")).
Now if you have more than one submit button to send the page content to different post action, there are few ways: one of them is to post the content to a specific action and then decide in it to redirect which action:
Razor:
<input type="submit" value="Field1" name="submitButton" /> <input type="submit" value="Field2" name="submitButton" />
Controller:
public ActionResult SpecificOne(DTO dTO, string submitButton)
{
switch (submitButton)
{
case "Field1":
return RedirectToAction("FirstCreate")
case "Field2":
return RedirectToAction("SecondCreate")
}
}
But the way that I like it more is to use the attribute in post actions, this attribute would be like this:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class HttpParamActionAttribute : ActionNameSelectorAttribute
{
public string Name { get; set; }
public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
{
return controllerContext.HttpContext.Request[Name] != null;
}
}
Now in your razor view, you should give a name to your buttons (names should be the same as your target actions) :
@model DTO
@using(Html.beginForm(null, null))
{
<button type="submit" name="FirstCreate" >First</button>
<button type="submit" name="SecondCreate" >Second</button>
}
And about the actions you should use the mentioned attribute and give the button name property:
[HttpPost]
[HttpParamAction(Name = "FirstCreate")]
public ActionResult FirstCreate()
{
return View();
}
[HttpPost]
[HttpParamAction(Name = "FirstCreate")]
public ActionResult SecondCreate()
{
return View();
}
Good luck!