我的方案如下:
我有2个查看模型:
TViewModel
QSViewModel
两者都有一个共同的属性TopicId
,它是同一个控制器的dropdownlist
填充。
在我的页面上,我显示了TViewModel
用于添加数据。我成功填充了dropdownlist
。
现在在同一页面上,我jquery
调用显示popupform
。在此表单上,我显示视图模型QSViewModel
以输入数据。我希望这里也会TopicId
为dropdownlist
,就像第一页一样。
但事实并非如此。调用控制器,返回数据,但下拉列表仍为空。
public class TViewModel
{
[UIHint("AjaxDropdown")]
[Required]
public int LevelId { get; set; }
[UIHint("AjaxDropdown")]
public int? TopicId { get; set; }
}
public class QSViewModel
{
[UIHint("AjaxDropdown")]
[Required]
public int QSId { get; set; }
[UIHint("AjaxDropdown")]
public int? TopicId { get; set; }
}
我的一页,我有
@using (Ajax.BeginForm("Create", "Test", new AjaxOptions { OnSuccess = "Test" }))
{
<fieldset>
<div class="editor-field">
@Html.EditorFor(model => model.LevelId)
@Html.ValidationMessageFor(model => model.LevelId)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.TopicId)
@Html.ValidationMessageFor(model => model.TopicId)
</div>
<p>
<input id="create" type="submit" value="Create" />
</p>
</fieldset>
}
TopicId
已正确填充来自控制器的数据。
弹出窗口中显示的视图:
using (Ajax.BeginForm("Add", "Questionset",new AjaxOptions{OnSuccess = "Test"}))
{
<fieldset>
<legend>Questionset</legend>
<div class="editor-field">
@Html.EditorFor(model => model.QuestionsetTypeId)
@Html.ValidationMessageFor(model => model.QuestionsetTypeId)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.TopicId, "AjaxDropdown", htmlFieldName: "QuestionsetTopicId")
@Html.ValidationMessageFor(model => model.TopicId)
</div>
<p>
<input id="create" type="submit" value="Create" />
</p>
</fieldset>
}
当我检查渲染的html时,我看到TopicId
呈现的ID相同。
谁能告诉我我在这里做错了什么?
Update:
控制器代码填充dropdownlist
public ActionResult GetItems(int? key)
{
var list = new List<SelectListItem> { new SelectListItem { Text = Resources.not_selected, Value = "" } };
list.AddRange(r.GetAll().Select(o => new SelectListItem
{
Text = o.Name,
Value = o.Id.ToString(),
Selected = o.Id == key
}));
return Json(list, JsonRequestBehavior.AllowGet);
}
当我调试时,我看到从这里返回正确的值,但它们不会显示在视图中的控件上。