【问题标题】:How Can Multiple Model Paramaeters Be Used In The Same RadioButtonFor() List?如何在同一个 RadioButtonFor() 列表中使用多个模型参数?
【发布时间】:2016-01-25 15:55:32
【问题描述】:

有什么方法可以在 html 上的同一个单选按钮组中使用多个模型属性,而不会破坏 Razor 用来在提交时获取唯一字段的 Name 字段?

我尝试了以下方法:

<h2>Store or Corporate</h2>
        <div class="store-selection-buttons">
            <label>Corporate</label>
            @Html.RadioButtonFor(model => model.JobPostStatus.IsCorporate, "true")
            <label>All Stores</label>
            @Html.RadioButtonFor(model => model.JobPostStatus.IsAllStores, "true")
            <label>Select Stores</label>
            @Html.RadioButton("Store Selection", false, new { @id = "select-stores" })
            //This one does other selection work in jquery for individual stores (List<int>)
        </div>

【问题讨论】:

  • 我听不懂这句话然而Razor 只允许RadioButtonFor 用于参数作为组合功能?
  • 我知道如何将参数链接到单选按钮的唯一方法是 RadioButtonFor(),但是您可以将单选按钮链接在一起,因为名称就是参数名称

标签: c# asp.net-mvc razor


【解决方案1】:

您正试图在您的模型中利用两个不同的属性:

  • IsCorporate
  • IsAllStores

模型表明两者可以同时为true或false。您真的应该将它们分组到一个属性中,因为一次只能选择一个。如果您要求两个单独的,您可以附加另一个 hidden 并关闭两者,但显然您会与“如果两者都是真的怎么办?”应该选择哪一个。

不过,您可以通过多种方法做到这一点,最简单的方法是:

<input type="hidden" value='@Html.DisplayFor(business => model.IsBusiness)' />
<input type="radio" name="businessType" value="true">Corporate</input>
<input type="radio" name="businessType" value="false">Store</input>

然后您可以简单地让document.load 上的 jQuery 触发更改以选择正确的值。

另一种选择是,如果您像我提到的那样转换为单一值,您可以关注此 Stack Overflow answer。

【讨论】:

  • 单值在这种情况下不起作用,选择与确定的是/否略有不同。这是一个 Yes(All)、No(All)、Yes(Some in a list) 类型选项。转换为简单的布尔值或枚举在我的实例中不起作用
  • 您无法调整和 MVVM 以转换为单个实例?
  • 目前无法将其浓缩为单个参数(不将核心逻辑放在视图上)
【解决方案2】:

经过研究,Razor 需要单选按钮的名称不同才能成功回传,但单选按钮本身需要相同的名称才能成功链接。

目前没有使用 Razor 语法解决此问题的方法,最好的替代方法是使用带有 if() 语句的复选框来关闭所有其他复选框

此问题已通过创建自定义 jquery 验证得到解决,如果其他 3 个复选框中的任何一个处于打开状态,则其余复选框将被取消选中。

【讨论】:

    【解决方案3】:

    单选按钮组的basic HTML 是,例如

      <input type="radio" name="gender" value="male"> Male<br>
      <input type="radio" name="gender" value="female"> Female<br>
      <input type="radio" name="gender" value="other"> Other
    
    • 我们需要名称相同,以便它们作为一个组一起工作
    • 我们需要传入模型中的值,以便正确显示

    您可以通过以下方式接近:

    @Html.RadioButton("JobStatus", @Model.JobPostStatus.IsCorporate, new { @id = "JobPostStatus.IsCorporate" }) Corprate<br />
    @Html.RadioButton("JobStatus", @Model.JobPostStatus.IsAllStores, new { @id = "JobPostStatus.IsAllStores" }) All<br />
    @Html.RadioButton("JobStatus", "false") Select<br />
    

    它通过了这些要求,但您正在尝试将单个 HTML 构造(单选按钮组)绑定到多个模型属性。如果您打算将其发回,您会遇到问题,在这种情况下,您将更好地使用您的代码并使用 JavaScript 构建伪单选按钮组行为。

    【讨论】:

    • 在不丢失表单提交属性的情况下,我无法更改其他 2 个的名称
    • 我更想更改静态名称,您可以控制它的 id。
    • 那么我该怎么做才能让另外两个匹配,所以所有 3 个都可以成为一个列表?
    • 当您检查 HTML 时,其他两个会生成什么 ID / 名称?
    • Names = JobPostStatus.IsAllStores, JobPostStatus.IsCorporate Ids=JobPostStatus_IsCorporate, JobPostStatus_IsAllStores
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 2017-04-07
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多