作成してビューに渡すモデルがあります。モデルはフォームを作成し、HttpPost
属性を使用してモデルを取得します。モデルをデータベースに保存してから、デフォルトのモデル状態をビューに戻したい (IE ドロップダウン値、ただし選択された項目ではない)
空のモデルを作成し、これをビューに渡しましたが、値は同じままで、理由がわかりません。
私の見解
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>
<h2>Configuration settings</h2>
</legend>
<div class="editor-label">
@Html.LabelFor(model => model.DeviceType)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.DeviceTypeSelectedItem, new SelectList(Model.DeviceType, "Value", "Text"),new {@class = "DeviceTypeDDL"})
@Html.ValidationMessageFor(model => model.DeviceTypeSelectedItem)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ConfigGroup)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.ConfigGroupSelectedItem, new SelectList(Model.ConfigGroup, "Value", "Text"),new {@class = "ConfigGroupDDL"})
@Html.ValidationMessageFor(model => model.ConfigGroupSelectedItem)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ConfigName)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.ConfigNameSelectedItem, new SelectList(Model.ConfigName, "Value", "Text"),new {@class = "ConfigNameDDL"})
@Html.ValidationMessageFor(model => model.ConfigNameSelectedItem)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ConfigValue)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ConfigValue)
@Html.ValidationMessageFor(model => model.ConfigValue)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.MergeOrDelete)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.MergeOrDeleteSelectedItem, new SelectList(Model.MergeOrDelete, "Value", "Text"), new { @class = "MergeDeleteDDL" })
@Html.ValidationMessageFor(model => model.MergeOrDeleteSelectedItem)
</div>
@Html.HiddenFor(model => model.ManagementGroupId)
<p>
<input type="submit" value="Add" />
</p>
</fieldset>
}
コントローラ:
[HttpGet]
public ActionResult Index(int id)
{
var model = CreateDefaultConfigModel(id);
return View(model);
}
[HttpPost]
public ActionResult Index(vmConfiguration model)
{
if (ModelState.IsValid)
{
bool isMerge = model.MergeOrDeleteSelectedItem == 1 ? true : false;
_configLogic.AddConfigurationValue((int)model.ConfigNameSelectedItem, (int)model.ManagementGroupId, model.ConfigValue, isMerge);
return View(CreateDefaultConfigModel(model.ManagementGroupId));
}
else
{
return View(model);
}
}
private vmConfiguration CreateDefaultConfigModel(int id)
{
var model = new vmConfiguration
{
DeviceType = _configLogic.GetDevices,
ConfigGroup = new List<SelectListItem>() { EmptySelect() },
ConfigName = new List<SelectListItem>() { EmptySelect() },
ConfigGroupSelectedItem = null,
MergeOrDeleteSelectedItem = null,
DeviceTypeSelectedItem = null,
ConfigNameSelectedItem = null,
ManagementGroupId = id,
ParamData = _configLogic.GetParamValuesForGroup(id)
};
return model;
}
private static SelectListItem EmptySelect()
{
return new SelectListItem { Text = "No value", Value = "-1" };
}
private ConfigurationLogic _configLogic;
調査の結果this.ModelState.Clear();
、新しいモデルを作成する前に呼び出すと機能することがわかりましたが、MVC が渡したモデルを無視してバインドされたモデルを使用するのはなぜですか?