gpt4 book ai didi

c# - 使用 ViewBag 传递模型对象

转载 作者:太空狗 更新时间:2023-10-29 23:51:57 25 4
gpt4 key购买 nike

我正在尝试对我的结果页面进行排序(它位于过滤页面之外的另一个 View 中)。我遇到了这个奇怪的问题,我不明白为什么总是发生在我身上。

所有代码都以非常简短的形式提供,如果您需要我的代码的任何其他部分以获取更多信息,请询问我。

我的索引 View (用户过滤结果的地方):

@model IEnumerable<Cars.Models.CarSearch>
@using (Html.BeginForm("SearchResult", "Home", FormMethod.Post,
new
{
id = "CategoryFormID",
data_modelListAction = @Url.Action("ModelList"),
data_makeListAction = @Url.Action("MakeList"),
data_editionListAction = @Url.Action("EditionList")
}))
{
<label>Make</label>
<select id="MakeID" name="carMake">
<option>All Makes</option>
</select>
}

我的搜索结果 View :

@model IEnumerable<Cars.Models.Car>

<a href="@Url.Action("SearchResult", "Home", new { sortOrder= "Make", filters = ViewBag.CurrentFilters})">Make</a>

我的模型:

public class Car
{
public String Make { get; set; } //is my table model
}

public class CarFilter {
public String carMake { get; set; }
}

public class CarSearch {
public CarFilter CarFilter { get; set; }
public byte PageSize { get; set; }
public short PageNumber { get; set; }
public int TotalRows { get; set; }
}

我的 Controller :

public ActionResult SearchResult(String sortOrder, CarFilter filters)
{
ViewBag.CurrentFilters = filters;

return View();
}

我想做的就是从 Index 中获取 carMake,以 CarFilter 形式将其发布到 Controller (因为在我的代码中,形式中有很多字段,我不想将它们全部写下来)以及何时用户点击 sort by Make it GET SearchResult 方法,它应该设置 filters = ViewBag.CurrentFilters,这是用户从一开始输入的值。

现在有趣的是,当我分别用 String carMake 和其他地方替换 CarFilter 过滤器 时。它就像一个魅力。

我的问题:

  • 为什么?

  • 如何使用 CarFilter 过滤器 执行此操作?

更新:

问题是我的 SearchResult View 中的 filters = ViewBag.CurrentFilters 不适用于 CarFilter 类型,因为当用户点击排序时它一直给我 NULL 值由 Make.

第二次更新:

我尝试将 filters = ViewBag.CurrentFilters 更改为 CarFilter = ViewBag.CurrentFilters。现在,我的 Controller 中的 SearchResult(...) 方法中的 CarFilter 过滤器 不是 null 对象,但是模型类中对象的所有值都是 null(这不应该)。我的意思是过滤器对象存在,但我的模型中的 CarFilter 类的值似乎没有被 ViewBag.CurrentFilters 传递给 View 。

最佳答案

当您更改名称时,它起作用了,因为框架找到了属性名称并将其绑定(bind)到您在操作参数中所拥有的名称,但它不能很好地与对象一起使用。我的建议是坚持使用简单类型

这是一个类似的案例: How to send model object in Html.RenderAction (MVC3)

这不是 ViewBag 的问题,而是它的一般工作方式。这是使用扁平模型的主要原因:/

关于c# - 使用 ViewBag 传递模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13717108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com