【问题标题】:Strongly typed view in partial view not working部分视图中的强类型视图不起作用
【发布时间】:2015-02-14 22:00:18
【问题描述】:

我在强类型视图中提交表单时遇到问题。我的视图是局部的,并嵌入在另一个没有形式的强类型视图中。我的父视图控制器返回类型 JobsListViewModel。

public class JobsListViewModel
{
        public IEnumerable<JobPost> JobPosts { get; set; }
        public PagingInfo PagingInfo { get; set; }
        public SearchTerms searchTerms { get; set; }
 }

注意:JobPosts 本身就是一个模型类,我在父视图中使用它。 searchterms 是我在局部视图中使用的模型类。 我的部分视图中的表单如下所示。

 @using (Html.BeginForm("List", "Search",  
          FormMethod.Post, new { @class="form-group text-right" }))
{
  @Html.TextBoxFor(x=>x.searchTerms.searchText,new {@class="form-control"})
  @Html.DropDownListFor(func=>func.searchTerms.JobFunction,ViewBag.JobFunction as SelectList,"Job Function",new {@class="dropdown"})
   ....                               

}

我的 Post 控制器方法如下所示。

[HttpPost]
public ViewResult List(SearchTerms search,int page = 1)
{
 ....
}

在我的表单提交中,它调用我的 Post 控制器方法。但是,SearchTerms 始终为空。它完全不绑定。请问有什么地方可以实现吗?这与我的观点是部分观点有关吗?任何帮助将不胜感激。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    您部分正在根据 typeof JobsListViewModel 生成控件。例如,您的文本框看起来像

    <input type="text" name="searchTerms.searchText" ... />
    

    但您的回帖仅返回 typeof SearchTerms。 Typeof SearchTerms 不包含属性 searchTerms,因此绑定失败。

    您可以使用[Bind] 属性的Prefix 属性来有效地忽略前缀

    [HttpPost]
    public ViewResult List([Bind(Prefix="searchTerm")]SearchTerms search, int page = 1)
    

    或者,您可以回发视图所基于的模型

    [HttpPost]
    public ViewResult List(JobsListViewModel model, int page = 1)
    

    【讨论】:

    • 谢谢。第一个(即带前缀的)[Bind(Prefix="searchTerm")]SearchTerms search 返回 null。但是第二个工作正常。我有点害怕为 JobPost 传递 JobsListViewModel 可能有数千个,因此很大。如果通过 JobsListViewModel 会不会有性能问题?只是好奇 。谢谢。
    • 对不起,我把 SearchTerms 拼错了,这就是前缀之前不起作用的原因。现在好了。谢谢你的时间
    • 如果第一个不起作用,可能是因为您的 SearchTerms 模型包含名为 search 的属性。你需要发布你的模型来确定。在任何情况下,您的表单都不包含JobPosts 的任何属性(至少您没有显示任何属性),因此没有JobPosts 将回发并且该属性将是一个空列表
    猜你喜欢
    • 2013-04-23
    • 1970-01-01
    • 2013-07-28
    • 2012-09-30
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多