MVC3共享搜索模型混乱

时间:2011-09-05 19:07:03

标签: asp.net-mvc-3 razor

(想不出一个更好的头衔,对不起)

所以我有了我的布局页面,在这个页面上有一个搜索栏+选项。选择什么,应该带你到搜索页面,结果等相当标准。我为完成这项工作所做的是创建一个MasterModel类,其上有一个SearchDataModel类成员。此SearchDataModel包含搜索的各种参数(搜索字词,要搜索的字段等)。

然后我强烈地将我的布局页面输入到MasterModel类,并使用Html.BeginForm...我为它构建了搜索表单。但是,默认情况下不会检查与字段相关的所有复选框,即使所有字段的默认值为true(通过私有getter / setter设置)。

然而,当我将表单提交给SearchController时,所有复选框都设置为true。所以我有点困惑为什么它知道它们应该是真的,但是没有设置要检查的复选框?

在关键位置放置断点似乎表明模型没有在获取请求中实例化,只是发布到搜索控制器?

我可能会认为这一切都是错的,所以如果是这样的话,关于正确方式的指示总会受到赞赏。

public class MasterModel {
    public SearchDataModel SearchModel { get; set; }
}

public class SearchDataModel{
    private bool _OnTags = true;
    private bool _OnManufacturers = true;
    private bool _OnCountries = true;

    [Display(Name= "Tags")]
    public bool OnTags {
        get { return _OnTags; }
        set { _OnTags = value; }
    }
    [Display(Name= "Manufacturers")]
    public bool OnManufacturers {
        get { return _OnManufacturers; }
        set { _OnManufacturers = value; }
    }
    [Display(Name= "Countries")]
    public bool OnCountries {
        get { return _OnCountries; }
        set { _OnCountries = value; }
    }
    [Required]
    [Display(Name="Search Term:")]
    public string SearchTerm { get; set; }
}

然后在_layout页面中:

                            @Html.CheckBoxFor(m => m.SearchModel.OnTags, new { @class="ddlCheckbox", @id="inpCheckboxTag" })
                            @Html.LabelFor(m =>m.SearchModel.OnTags)

1 个答案:

答案 0 :(得分:1)

请务必从您的观点中返回已初始化MasterModel的{​​{1}}:

SearchModel

实现此功能的另一种可能性是强烈地将您的主布局输入到视图模型中,使用public ActionResult Index() { var model = new MasterModel { SearchModel = new SearchDataModel() }; return View(model); } ,如Phil Haack在blog post.

中所示