Hai ragione, questo è il modello vincolante al lavoro.
Il legame avviene quasi automaticamente quando si utilizza HtmlHelpers quali:
@Html.TextboxFor(model => model.PropertyName)
Questa linea crea effettivamente qualcosa di un po 'come questo:
<input type="textbox" id="Modelobject_PropertyName" name="ModelObject.PropertyName" />
Poi, quando si invia il modulo, il DefaultModelBinder
è in grado di deserializzare il valore POST e creare e oggetto del tipo specificato (almeno ci proverà), se non riesce a trovare una voce corrispondente, la proprietà sarà nullo e se una voce non ha alcuna proprietà corrispondente, sarà ignorato (a meno che tu non lo sia hai altri parametri).
È possibile leggere questo article è un po 'vecchio, ma è ancora abbastanza preciso.
Come un exemple:
Diciamo si dispone di un semplice oggetto:
public class IndexModel
{
public string MyProperty { get; set; }
public bool MyCheckbox { get; set; }
}
Un semplice 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);
}
}
E una semplice visione:
@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" />
}
Vedrai, quando y Invia il modulo, che il modello è ricreato completamente.
Se non si desidera visualizzare il valore effettivo di una proprietà, ma ancora bisogno persistito:
@Html.HiddenFor(model => model.MyProperty)
Questo genererà un campo nascosto che verrà pubblicato indietro e, per questo, persisteva.
Felice codifica!
Ciao LostDreamer, Una risposta completa e utile. Sono d'accordo che questo è il modo in cui ho bisogno di andare e il mio commento precedente a Pablo afferma. Vorrei sottolineare che entrambe le risposte sono ugualmente utili. Non sono sicuro di poterlo fare. Abbraccio ancora grazie. Ed – EdB