【问题标题】:Asp.net MVC search using model and return different model (partial view)Asp.net MVC 使用模型搜索并返回不同的模型(部分视图)
【发布时间】:2014-03-11 19:24:16
【问题描述】:

我正在尝试在 MVC 视图中实现搜索功能。我有一个名为“ReturnResults”的视图和部分视图(_Find)。 _Find 是我用来查找/过滤结果的对象。

这是实现搜索的正确方法吗?我收到错误传入字典的模型项的类型为“MyModels.ReturnResults”,但该字典需要一个“MyModels.Find”类型的模型项。

控制器方法:

public ActionResult Locate(Find find)
{
    List<ReturnResults> returnV = new List<ReturnResults>();
    returnV = CallDB.GetList(find)
    return View(returnV);
}

查看(返回结果):

@model MyModels.ReturnResults

@{
    ViewBag.Title = "List Results";
}

@Html.Partial("_Find", Model)

部分视图(_Find):

@model MyModels.Find

@{
    ViewBag.Title = "Find";
}

@using (Html.BeginForm("Locate", "LocateCource", FormMethod.Post, new { name = "frmLocate", id = "frmLocate"}))
{
    <td>
        @Html.LabelFor(m => m.Number)
        @Html.TextBoxFor(m => m.Number)
    </td>
    <td>
        @Html.LabelFor(m => m.Course)
        @Html.TextBoxFor(m => m.Course)
    </td>   
    <td>
        @Html.LabelFor(m => m.Location)
        @Html.TextBoxFor(m => m.Location)
    </td>
    </td>   
    <td>
        @Html.LabelFor(m => m.Condition1)
        @Html.TextBoxFor(m => m.Condition1)
    </td>
    <td>
        @Html.LabelFor(m => m.Condition2)
        @Html.TextBoxFor(m => m.Condition2)
    </td>   
        <td>
        @Html.LabelFor(m => m.Condition3)
        @Html.TextBoxFor(m => m.Condition3)
    </td>   
}

局部视图:

public class Find
{
    [Display(Name = "Number ")]
    public int Number { get; set; }

    [Display(Name = "Course Name")]
    public string Course { get; set; }

    [Display(Name = "Course Name")]
    public string Location { get; set; }

    [Display(Name = "Condition1")]
    public string Condition1 { get; set; }  

    [Display(Name = "Condition2")]
    public string Condition3 { get; set; }  

    [Display(Name = "Condition3")]
    public string Condition3 { get; set; }      
}

视图:(部分视图)

public class ReturnResults
{
    [Display(Name = "Number ")]
    public int Number { get; set; }

    [Display(Name = "Course Name")]
    public string Course { get; set; }

    [Display(Name = "Return1")]
    public string Return1 { get; set; }

    [Display(Name = "Return2")]
    public string Return2 { get; set; }

    [Display(Name = "Return3")]
    public string Return3 { get; set; }

    [Display(Name = "Return4")]
    public string Return4 { get; set; }

    [Display(Name = "Return5")]
    public string Return5 { get; set; }

    [Display(Name = "Return6")]
    public string Return6 { get; set; } 
}

【问题讨论】:

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


    【解决方案1】:

    在您的 ReturnResults 视图中,您将 Model 传递给局部视图。此 Model 对象是 ReturnResults 类型,但部分视图需要 Find 类型的模型。这就是您的错误消息告诉您的内容。解决此问题的一种方法是将属性添加到 Find 类型的 ReturnResults 视图模型类中,然后在调用局部视图时将其传入。

    @Html.Partial("_Find", Model.Find);
    

    另外,在您的控制器中,您正在创建一个 ReturnResults 列表; ,但您的 ReturnResult.cshtml 视图需要一个标量 ReturnResult 对象。

    【讨论】:

    • 这是唯一的搜索方法吗?还是有更好的方法?
    • 它当然不是唯一的搜索方式。我只是在回答您为什么会收到错误的问题。这不是“我应该如何设计这个”的论坛。我认为 Stack Exchange 家族下的其他网站之一可以处理这些类型的问题
    【解决方案2】:

    由于您正在构建搜索功能,并且不需要对现有值进行任何编辑,您可以尝试@Html.Partial("_Find", new MyModels.Find())

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 2014-04-03
      • 1970-01-01
      相关资源
      最近更新 更多