具有使用@ Html.Editor的公共属性的不同ViewModel不起作用

时间:2014-03-07 09:58:15

标签: c# asp.net-mvc editorfor

我的方案如下:

我有2个查看模型:

  1. TViewModel
  2. QSViewModel
  3. 两者都有一个共同的属性TopicId,它是同一个控制器的dropdownlist填充。

    在我的页面上,我显示了TViewModel用于添加数据。我成功填充了dropdownlist

    现在在同一页面上,我jquery调用显示popupform。在此表单上,我显示视图模型QSViewModel以输入数据。我希望这里也会TopicIddropdownlist,就像第一页一样。

    但事实并非如此。调用控制器,返回数据,但下拉列表仍为空。

    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);
        }
    

    当我调试时,我看到从这里返回正确的值,但它们不会显示在视图中的控件上。

0 个答案:

没有答案