ASP.NET MVC 中没有 SelectList 的 ViewModel 绑定

ViewModel binding without SelectList in ASP.NET MVC

在我的 ASP.NET 核心应用程序中,我有一个显示产品列表的 ASP.NET MVC 视图。 (我想这也适用于其他版本的 MVC)。

当我 select 此列表中的项目并提交页面时,我希望 selected 产品 ID 绑定到 ViewModel 属性 的操作方法中控制器。为此,我正在使用 POST。

由于某些格式问题,我不想使用 SelectList 来呈现产品列表。因此,我在视图中遍历列表。

如何将 selected 产品与入站 ViewModel 对象的 ProductId 属性 绑定?

不清楚 "select an item from this list and submit the page" 是什么意思。您是选择一个项目,可能会填写更多字段,然后提交整个 shebang,还是选择一个项目构成提交表单。根据情况有几种方法:

  1. 如果选择一个项目提交表单,那么您只需将 "Select" 按钮设为提交按钮并为其指定名称和值即可。例如:

    Item 1 <button type="submit" name="ProductId" value="1">Select</button>
    

    无论单击哪个 "Select" 按钮,其值 post 都会被编辑为 ProductId

  2. 如果您需要选择一个项目,同时留在页面上以填写其他字段,那么您可以使用单选按钮作为 select 列表的替代方法。这与上面的方法类似,只是您不会立即 post 表单。不过,您的输入看起来很相似:

    <label>
        <input type="radio" name="ProductId" value="1"> Item 1
    </label>
    <label>
        <input type="radio" name="ProductId" value="2"> Item 2
    </label>
    ...
    
  3. 最后,如果您不需要立即提交并且您也不想使用单选按钮,那么您唯一的选择是使用 JavaScript 设置隐藏输入。您将绑定到 "Select" 按钮或其他任何按钮的点击事件,然后将带有 name="ProductId" 的隐藏输入设置为适当的值。然后,当您最终提交表单时,隐藏输入的值将 posted 为 ProductId