我有一個新的相當基本的視圖/控制器的MVC 4應用程序。相關模型包含一對夫婦屬性,我已將其映射到隱藏表單字段。當頁面第一次渲染時(,例如通過HttpGet動作),它看起來都很好。但是,當通過選擇提交按鈕來完成表單時,呈現給操作的結果模型不再具有設置的隱藏字段值。這是一個詳細的演練。回覆後隱藏的表單字段不出現在MVC模型中
這裏是模型的樣品:
public class Application
{
public bool ShowSideBars { get; set; }
}
這裏是初始控制器 * 行動 *(這似乎很好地工作):
[HttpGet]
public ActionResult Application()
{
var model = Request.ParseFromQueryString<Application>();
model.ShowSideBars = true;
return View(model);
}
這映射到查看如下:
<fieldset>
@Html.HiddenFor(m => m.ShowSideBars)
...
</fieldset>
這將導致以下加價到字段集裏面被渲染:
<input data-val="true" data-val-required="The ShowSideBars field is required." id="ShowSideBars" name="ShowSideBars" type="hidden" value="True" />
注意:我當然希望我知道爲什麼MVC已決定加入」。 ..字段是必需的'內容,當我沒有按要求標記,但這是另一個問題
這是活動在提交表單時調用的是。此時上述屬性將不再設置爲'true'。
[HttpPost]
public ActionResult Application(Application application)
{
// Other work done here
return View(application);
}
目前還沒有定製型號粘結劑。另外,我測試了一些其他的數據類型,我看到了同樣的事情。
有人可以解釋爲什麼隱藏的表單值沒有被返回?我只是做這一切都錯了嗎?
的'數據-VAL-required'被渲染,因爲模型類型是'bool'。 Bools默認是必需的,它們必須是真或假。如果你不想看到data-val所需的數據,那麼使這個屬性成爲'bool?'。 – danludwig 2012-03-19 19:15:32
另外,Data Annotations會將「必需」添加到任何不可爲空的類型。 Ints和Bools將根據需要自動標記。 – 2012-03-19 19:17:07
@ danludwig好主意!謝謝。這將防止整個頁面大小有點膨脹。 – JoeGeeky 2012-03-19 19:20:59