好,將數據發送到控制器操作通常通過對此控制器操作執行HTTP請求來完成。有執行HTTP請求的方式不同:
- 使用
<form>
標籤指向這個動作
- 使用AJAX
所以,如果你用第一種方法去,你可以有一個<form>
包裝所有的部分將有多個提交按鈕(具有不同的名稱)。然後當你點擊一個提交按鈕時,所有的輸入字段將被髮送到控制器動作,然後在控制器動作中,你可以基於哪個提交按鈕被點擊來處理數據。
如果您使用第二個選項,那麼只需收集您需要發送的按鈕點擊按鈕並將它們沿着AJAX請求發送。
UPDATE:
正如在評論部分要求在這裏是如何的第一個技術可以付諸行動。它使用兩個部分而不是三個,但它可以很容易地外推。
與往常一樣開始通過定義將代表數據的視圖模型,你想在這個特別的觀點一起工作:
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)
}
和兩個相應的edito [R模板(或諧音如果你願意):
~/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>
u能提供例如如何實現此 – 2011-06-17 11:26:27