你說得對,這是工作中的模型綁定。
當您使用HtmlHelpers如的結合幾乎發生自動:
@Html.TextboxFor(model => model.PropertyName)
此行實際上創造的東西有點像這樣:
<input type="textbox" id="Modelobject_PropertyName" name="ModelObject.PropertyName" />
然後當您提交表單,該DefaultModelBinder
能夠反序列化POST值並創建給定類型的對象(至少它會嘗試),如果找不到相應的條目,則該屬性將爲空,如果條目沒有相應的屬性,則它將是忽略(除非喲你有其他參數)。
您可以閱讀這article它有點舊,但它仍然相當準確。
作爲爲例:
比方說,你有一個簡單的目標:
public class IndexModel
{
public string MyProperty { get; set; }
public bool MyCheckbox { get; set; }
}
一個簡單的CONTROLER:
public class TestingController : Controller
{
[OutputCache(Duration=0, NoStore = true)]
public ActionResult Index()
{
return View(new IndexModel { MyProperty = "hi" });
}
[HttpPost]
[OutputCache(Duration=0, NoStore = true)]
public ActionResult Index(IndexModel model)
{
model.MyProperty += "!";
ModelState.Clear();
return View(model);
}
}
和一個簡單的觀點:
@model MvcApp.Models.IndexModel
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(model => model.MyProperty)<p />
@Html.TextBoxFor(model => model.MyProperty)
</div>
<div>
@Html.LabelFor(model => model.MyCheckbox)<p />
@Html.CheckBoxFor(model => model.MyCheckbox)
</div>
<input type="submit" />
}
你會看到,當你提交表格,模型完全重新創建。
如果你不想顯示屬性的實際值,但仍需要它堅持:
@Html.HiddenFor(model => model.MyProperty)
這將產生將被調回隱藏字段和,爲此,堅持。
快樂編碼!
嗨Lostdreamer,一個最全面和有益的答覆。我同意這是我需要去的方式,以及我之前對巴勃羅說的評論。我想標記兩個答案同樣有用。不知道我是否可以做到這一點。再次抱抱感謝。埃德 – EdB