gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:19:19 25 4
gpt4 key购买 nike

我有一个 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/

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