c# - Asp.Net MVC - 参数与模型值的绑定(bind)!

标签 c# asp.net asp.net-mvc

这似乎是模型绑定(bind)导致了我的问题。

基本上我有一个名为 ProductOption 的模型,为了这个问题的目的,它有 2 个字段

ID (Int) PK ProductID (Int) FK

我有一个标准的路线设置

    context.MapRoute(
        "Product_default",
        "Product/{controller}/{action}/{id}",
        new { controller = "Product", action = "Index", id = UrlParameter.Optional }
    );

如果用户想要添加一个选项,URL 是

/Product/Options/Add/1

在上面的 URL 中,1 是 ProductID,我有以下代码来返回 View 的空白模型,

[HttpGet]
public ActionResult Add(int id)
{
    return View("Manage", new ProductOptionModel() { ProductID = id });
}

现在在我看来我保留了一个隐藏字段

<%= Html.HiddenFor(x=>x.ID) %>

这用于确定(在提交时)我们是否正在编辑或添加新选项。然而,.net 中的模型联编程序似乎将 .ID(离开上面的 get actionresult 时为 0)替换为 1(或 URL 中 id 参数的值)

我怎样才能停止或解决这个问题?

View 模型

public class ProductExtraModel
{
    //Database 
    public int ID { get; set; }
    public string Name { get; set; }
    public int ProductID { get; set; }

    public ProductModel Product { get; set; }
}

最佳答案

我认为正在设置 id 参数,因为默认情况下,您的路由会设置它。在您的 Controller 中,您在 ProductID 的 ViewModel 中设置了一个附加参数,这可能始终等于 ID 参数,因为两者基本上都设置为 QueryString/GET 参数。 (在本例中为 1)。

当您阻止它分配 ID 参数时,您更改路由的修复似乎是一个不错的选择,但可能并不理想 - 取决于您希望如何解决问题:

context.MapRoute(
  "Product_addoptionalextra",
  "Product/{controller}/Add/{ProductID}",
  new { controller = "Product",action="Add", ProductID = UrlParameter.Optional }
);

或者,重新安排您的变量,使 ID 实际上是相关的 ProductID,然后您可以使用代表 ID 的 OtherID。

如果您有 MVC 2,我可能会建议解决此问题的方法是使用 EditorTemplates / DisplayTemplates .虽然我不知道您的 ProductViewModel,但我认为它包含 ID。如果您设置了适当的模板,您几乎可以忘记可能重叠的 ID。

public class ProductExtraModel
{
   //Database 
  public int ID { get; set; }
  public string Name { get; set; }

  [UIHint("Product")]
  public ProductModel Product { get; set; }
}

当使用 productExtraViewModel.Product.ID 将模型传递回 Controller 时,您将能够访问产品 ID,并且您的正常 ID 仍将在 productViewModel.Id 上可用

关于c# - Asp.Net MVC - 参数与模型值的绑定(bind)!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3038295/

相关文章:

c# - 当一切都在编译时已知时,为什么我不能将 nameof 与泛型一起使用?

c# - HttpPost 方法中的 ViewModel 为 Null

asp.net-mvc - 使用 MVCContrib TestHelper 时出错

c# - 在 asp.net 中仅获取文件夹中的文件名称,而不获取完整路径

asp.net - 多边形的国家行政级别

javascript - 如何使用 JavaScript 确认对话框菜单触发表单提交事件

c# - wpf 工具提示未显示在用户控件或其子控件上

c# - linq中的动态投影

c# - C# 中的本地化属性参数

c# - 在 EF6 和 ASP.NET 中同时使用多个 DbContext 实例