Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 MVC3共享搜索模型_Asp.net Mvc 3_Razor - Fatal编程技术网

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
,而不是在视图模型中强力键入主布局。谢谢!与菲尔的博客想法一致。对我来说似乎更流畅,然后对控制器方法进行重写:)