我無法將視圖中的字段(文本框和複選框)提交給我的模型,但我不確定如何繼續。每次我點擊應該提交給模型的按鈕時,控制器都會檢查應該由視圖設置的字段,但會一直返回false。所以要麼他們沒有被置於首位,要麼控制器讀錯了。無論哪種方式,我都處於虧損狀態。請幫助:X將剃刀視圖字段綁定到MVC模型中3
視圖(有些簡化):
@model Model
@Html.ValidationSummary()
@{ Html.BeginForm("PrintReport", "Controller", FormMethod.Get, new { @class = "form_ll" }); }
<h1>@ViewBag.Title</h1>
<div class="group">
@Html.ValidTextBoxFor(Model => Model.ToDate)
@Html.ValidTextBoxFor(Model => Model.FromDate)
@Html.CheckBoxFor(Model => Model.Geplakt)
@Html.CheckBoxFor(Model => Model.Geparafeerd)
@Html.CheckBoxFor(Model => Model.Verschreven)
@Html.CheckBoxFor(Model => Model.Geannuleerd)
@Html.CheckBoxFor(Model => Model.Vermist)
@Html.CheckBoxFor(Model => Model.Vernietigd)
@Html.CheckBoxFor(Model => Model.Onbruikbaar)
@Html.CheckBoxFor(Model => Model.Misdruk)
@Html.CheckBoxFor(Model => Model.Teruggevonden)
@Html.CheckBoxFor(Model => Model.InOnderzoek)
</div>
<div class="button">
@Html.Button("Print")
</div>
@{ Html.EndForm(); }
型號:
[Serializable]
public class Model : DomainObject
{
[DataType(DataType.Date)]
public DateTime? FromDate { get; set; }
[DataType(DataType.Date)]
public DateTime? ToDate { get; set; }
public bool Geplakt { get; set; }
public bool Geparafeerd { get; set; }
public bool Verschreven { get; set; }
public bool Geannuleerd { get; set; }
public bool Vermist { get; set; }
public bool Vernietigd { get; set; }
public bool Onbruikbaar { get; set; }
public bool Misdruk { get; set; }
public bool Teruggevonden { get; set; }
public bool InOnderzoek { get; set; }
public Model()
{
// Constructor
}
}
控制器:
public class Controller : ModelController<Model>
{
[HttpGet]
public ActionResult Index()
{
Model = new Model();
return InternalIndex();
}
[HttpGet]
public ActionResult InternalIndex()
{
return View("Index", Model);
}
[HttpGet]
public ActionResult PrintReport()
{
if (!Model.FromDate.HasValue || !Model.ToDate.HasValue)
ModelState.AddModelError("Date", "At leaste one date is null");
else {
if (Model.FromDate.Value.CompareTo(Model.ToDate.Value) >= 0)
ModelState.AddModelError("Date", "First date is later then the second one");
}
if(Model.IsAnythingChecked())
ModelState.AddModelError("Checkboxes", "You haven't checked any checkboxes");
if (ModelState.IsValid)
{
return View("PrintReport", Model);
}
else
{
return InternalIndex();
}
}
我在這裏得到了相同的答案5次,所以顯然這是問題所在。我認爲,因爲PrintReport方法只能通過Index方法訪問 - 而Index方法構造了Model,所以PrintReport使用的是相同的Model變量。我猜這不是,因爲在Action中傳遞一個模型的工作。雖然我覺得有點奇怪,但我不必使用傳遞的模型。 – shmow 2012-04-23 08:49:34
我犯過同樣的錯誤。當PrintReport發佈給它時,它不會通過Index控制器方法,它將直接進入PrintReport方法。由於您使用表單發佈信息,因此必須將表單中的所有信息作爲PrintReport控制器中的參數綁定到您的模型,以便可以訪問所有屬性。 – tokyovariable 2012-04-23 15:27:53