0

如果我的一个视图中有以下代码:

@Html.Action("Grid", "Product", new { section = SectionType.Product })

这将调用Gridmy 的 action 方法ProductController,这一切都很好。如果 Grid 方法是这样定义的:

public ActionResult Grid(SectionType section) { ... }

然后参数将按照我的要求section填充为 。SectionType.Product但是,如果我将参数放在方法声明中,如下所示:

public ActionResult Grid() { ... }

然后section在视图中设置的值似乎完全消失了。它不在Request.Params,它不在Request.QueryString,事实上我似乎在任何地方都找不到它。

谁能告诉我这个值会发生什么?我可以从任何地方检索它,还是如果方法在参数列表中没有要求它,MVC 是否会完全丢弃它?

4

2 回答 2

2

您可以通过以下 RouteValueDictionary Values集合访问从路由中提取的任何RouteData参数RequestContext

var section = Request.RequestContext.RouteData.Values["section"];

我不确定,如果它是需要的枚举类型(即SectionType)装箱到 anobject中,或者只是一个string(也装箱到 anobject中),您需要自己适当地转换为枚举类型。

如果没有可以获取section参数值的段的路由,则应该将其存储在 中,Request.QueryString并且应该可以通过 访问Request.QueryString["section"]。同样在这种情况下,生成的 html 应该看起来像...?section=SomeSection,而如果你有合适的路线,它必须看起来像.../SomeSection

于 2013-03-12T00:20:49.677 回答
0

我猜SectionType是一个枚举。如果是,则如果在 Action 中找不到匹配的参数,则会发生错误。

// throw exception if you don't pass section value
public ActionResult Grid(SectionType section) { ... }

参数字典包含“MvcApplication1.Controllers.HomeController”中方法“System.Web.Mvc.ActionResult Index(MvcApplication1.Controllers.SectionType)”的不可为空类型“MvcApplication1.Controllers.SectionType”的参数“section”的空条目'。可选参数必须是引用类型、可空类型或声明为可选参数。参数名称:参数

non-nullable从上面的消息中可以看出,如果在 Action 中没有找到匹配的参数并且参数是类型,则会发生异常。

如果您像这样更改您的操作:

// nullable SectionType
public ActionResult Grid(SectionType? section) { ... }

或者

// default value
public ActionResult Grid(SectionType section = SectionType.Area) { ... }

sectionnullable类型时,将调用section值为空的动作。当section具有默认值时,将使用section值为 null 的动作调用,但在动作中它将使用默认值。

于 2013-03-12T00:14:17.420 回答