Что ж, отправка данных в действие контроллера обычно выполняется путем выполнения HTTP-запроса к этому действию контроллера. Существуют разные способы выполнения HTTP-запроса:
- Используйте тег
<form>
, указывающий на это действие
- Используйте AJAX
Таким образом, если вы выберете первый подход, у вас может быть один <form>
, заключающий в себе все части, которые будут иметь несколько кнопок отправки (с разными именами). Затем, когда вы нажмете одну из кнопок отправки, все поля ввода будут отправлены в действие контроллера, а затем внутри действия контроллера вы сможете обработать данные, основанные на том, какая кнопка отправки была нажата.
Если вы используете второй вариант, то просто соберите значения, которые вам нужно отправить, нажав кнопку uipon и отправьте их вместе с запросом AJAX.
ОБНОВЛЕНИЕ:
Как и просили в разделе комментариев, вот как можно применить первый метод. Он использует две части вместо трех, но его можно легко экстраполировать.
Как всегда, вы начинаете с определения модели представления, которая будет представлять данные, с которыми вы хотели бы работать в этом конкретном представлении:
public class MyViewModel
{
public Partial1ViewModel Model1 { get; set; }
public Partial2ViewModel Model2 { get; set; }
}
public class Partial1ViewModel
{
public string Foo { get; set; }
}
public class Partial2ViewModel
{
public string Bar { get; set; }
}
Затем контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
Model1 = new Partial1ViewModel { Foo = "foo" },
Model2 = new Partial2ViewModel { Bar = "bar" },
};
return View(model);
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
// Here you have access to model.Model1.Foo and model.Model2.Bar =>
var button = "";
if (!string.IsNullOrEmpty(Request["submit1"]))
{
// submit1 button was used
button = "submit1";
}
else if (!string.IsNullOrEmpty(Request["submit2"]))
{
// submit2 button was used
button = "submit2";
}
var result = string.Format("thanks for submitting using {0}", button);
return Content(result, "text/plain");
}
}
, а затем основной вид (~/Views/Home/Index.cshtml
):
@model MyViewModel
@using (Html.BeginForm())
{
@Html.EditorFor(x => x.Model1)
@Html.EditorFor(x => x.Model2)
}
и два соответствующих шаблона редактора (или частичные, если хотите):
~/Views/Home/EditorTemplates/Partial1ViewModel.cshtml
@model Partial1ViewModel
<h2>Partial 1</h2>
<div>
@Html.LabelFor(x => x.Foo)
@Html.EditorFor(x => x.Foo)
<input type="submit" value="Submit me!" name="submit1" />
</div>
~/Views/Home/EditorTemplates/Partial2ViewModel.cshtml
@model Partial2ViewModel
<h2>Partial 2</h2>
<div>
@Html.LabelFor(x => x.Bar)
@Html.EditorFor(x => x.Bar)
<input type="submit" value="Submit me!" name="submit2" />
</div>