這是我使用的視圖模型查看多個型號只發布1個模型
public class MainRegisterViewModel
{
public RegisterViewModel RegisterModel { get; set; }
public RegisterFormValuesViewModel RegisterValues { get; set; }
}
RegisterFormValuesViewModel
包含了控制所有的值(國家,州清單和類似的東西)和RegisterViewModel
包含用戶的信息。
然後我加載這樣的控件。
@model ProjetX.Models.MainRegisterViewModel
@{
IEnumerable<SelectListItem> countries = Model.RegisterValues.Countries.Select(x => new SelectListItem()
{
Text = x.Country,
Value = x.Id.ToString()
});
IEnumerable<SelectListItem> states = Model.RegisterValues.States.Select(x => new SelectListItem()
{
Text = x.State,
Value = x.Id.ToString()
});
}
<div class="container">
<div class="row">
<div class="col-md-12">
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
....
<div class="form-group">
@Html.LabelFor(m => m.RegisterModel.Country, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.RegisterModel.Country, countries, new { @class = "form-control" })
</div>
</div>
....
另外,註冊功能需要MainRegisterViewModel
作爲參數。
問題是,當我提交表單,RegisterFormValuesViewModel
是NULL
。
任何想法爲什麼?
謝謝
您語境
我這樣做是因爲我從API加載RegisterFormValuesViewModel
,我想只有一次調用它。問題出在用戶發佈錯誤表單並返回視圖時,我不得不再次調用API以獲取RegisterFormValuesViewModel
。
在此之前,它只是RegisterFormValuesViewModel
的一個模型和一個視圖包,但每次載入表單時都必須調用API,因爲viewbag沒有發佈。這就是爲什麼我認爲我可以使用2個模型並將它們都POST。
我可能會誤解,但除非RegisterFormValuesViewModel的值在POST中,否則模型將不會重新填充。例如,'states'下拉列表的選定值將在請求中,但用於構建列表的項目不會。 –
有沒有簡單的方法來發布值? – Marc
喬的回答給出了一些選擇。隱藏字段是最簡單的,但你想確保你沒有創建一個巨大的請求(比如webforms viewstate)。對於不經常更改的狀態/國家/地區,您可以將它們放入緩存中。 –