asp.net-mvc-3 - HttpPost 操作中的 MVC 3 拆分参数

标签 asp.net-mvc-3 http-post model-binding

我有一个 MVC 3 应用程序,我创建了一个通用包装器对象,它具有一些导航属性和 T 的包装对象,我正在编辑/显示其值。

public class NavigationViewModel<T>
{
    public T Model { get; set; }
    public NavigationHelper NavigationHelper { get; set; }

    public NavigationViewModel() { }

    public NavigationViewModel(T model, NavigationHelper helper)
    {
        this.Model = model;
        this.NavigationHelper = helper;
    }
}

我的 Controller 在这样的操作中很好地解析了这个对象:

public ActionResult Foo(NavigationViewModel<Bar> viewModel)

代码在我看来是这样的:

@Html.EditorFor(model => model.Model.SomeProperty) 

我同事说那段代码不好读。我已经有一个强类型的 View ,模型和这个模型有另一个名为模型的属性。他建议将 Model 属性重命名为 ViewModel,我同意他的推理。

现在,具有重命名属性的代码不再起作用:NavigationViewModel viewModel 为 null。所以我将 HttpPost 方法的签名更改为以下内容,它再次起作用:

[HttpPost]
public ActionResult Foo(NavigationHelper helper, Bar viewModel)

我非常喜欢这个!我可以直接在代码中访问我的 viewModel, View 中的代码是有意义的,并且辅助对象不会妨碍。我以前没见过这个约定,我猜它以前因为命名约定而起作用。使用名为 Model 的属性暗示了如何解析对象。没有该属性,它无法再解决它。

我想将此用于包含特定于 View 的属性的其他类型的助手,例如选择列表或我可能已放入我的 ViewBag 中的其他属性。你们会推荐这种方法吗?或者我以后使用它会遇到麻烦吗?

最佳答案

我想我有一个非常简单的答案给你,只是不要命名你的 Action 参数 viewModel,所以改变:


public ActionResult Foo(NavigationViewModel viewModel)

public ActionResult Foo(NavigationViewModel model)

或任何其他不与 NavigationViewModel 类上的 ViewModel 属性冲突的参数名称。

关于asp.net-mvc-3 - HttpPost 操作中的 MVC 3 拆分参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9871678/

相关文章:

java - Camel HTTP 端点 : How to set URL-String to POST Parameter

Angular 6 http POST - 将参数设置为 URL 中的查询字符串

c# - 如何在 Asp.Net Core 模型绑定(bind)中区分 JSON 中的空数据和不存在数据?

c# - 将空字符串绑定(bind)到 Guid.Empty 或避免模型状态错误

html - 在没有 javascript 的情况下更改悬停图像(使用 asp.net-mvc3)

asp.net-mvc - 从mvc4的主页调用区域的 Action

asp.net-mvc - 遍历集合并在 Razor 中打印索引和项目

asp.net-mvc-3 - MVC View 的命名空间问题 - Razor 引擎

hash - HTTP 请求的真实性和完整性

c# - 当请求模型实际上无效时,ModelState 有效