Asp.net mvc 3 MVC3共享搜索模型
(对不起,想不出更好的标题了) 所以我有我的布局页面,在这个页面上有一个搜索栏+选项。无论选择什么,都应该带你进入搜索页面,搜索结果等都相当标准。我所做的是创建一个Asp.net mvc 3 MVC3共享搜索模型,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,(对不起,想不出更好的标题了) 所以我有我的布局页面,在这个页面上有一个搜索栏+选项。无论选择什么,都应该带你进入搜索页面,搜索结果等都相当标准。我所做的是创建一个MasterModel类,上面有一个SearchDataModel类成员。此SearchDataModel包含搜索的各种参数(搜索词、要搜索的字段等) 然后,我在MasterModel类中强式输入了布局页面,并使用Html.BeginForm…构建了它的搜索表单。但是,默认情况下不会选中与字段相关的所有复选框,即使所有字段的默认值都为
MasterModel
类,上面有一个SearchDataModel
类成员。此SearchDataModel
包含搜索的各种参数(搜索词、要搜索的字段等)
然后,我在MasterModel
类中强式输入了布局页面,并使用Html.BeginForm…
构建了它的搜索表单。但是,默认情况下不会选中与字段相关的所有复选框,即使所有字段的默认值都为true(通过私有getter/setter设置)
然而,当我将表单提交给SearchController时,所有复选框都设置为true。所以我有点困惑,为什么它知道它们应该是真的,却没有设置复选框来选中
将断点放在关键位置似乎表明模型在get请求上没有被初始化,只是在向搜索控制器发送帖子时被初始化了
我可能在这件事上完全错了,所以如果是这样的话,那些正确道路的指针总是值得赞赏的
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; }
}
然后在_布局页面中:
@Html.CheckBoxFor(m => m.SearchModel.OnTags, new { @class="ddlCheckbox", @id="inpCheckboxTag" })
@Html.LabelFor(m =>m.SearchModel.OnTags)
请确保从视图中返回带有初始化的
SearchModel
的MasterModel
:
public ActionResult Index()
{
var model = new MasterModel
{
SearchModel = new SearchDataModel()
};
return View(model);
}
实现此功能的另一种方法是使用Phil Haack在其中所示的
Html.Action
,而不是在视图模型中强力键入主布局。谢谢!与菲尔的博客想法一致。对我来说似乎更流畅,然后对控制器方法进行重写:)