0

我的 mvc3 应用程序中有以下模型。我想在视图上有两个单选按钮,分别映射到重量和数量(这些是数据库中的位字段)。

public Unit()
    {
        this.OrderLineQuantity = new HashSet<OrderLine>();
        this.OrderLineWeight = new HashSet<OrderLine>();
    }

    public int ID { get; set; }
    public System.Guid UserId { get; set; }
    public string ShortDescription { get; set; }
    public string Desciption { get; set; }
    public System.DateTime AddDate { get; set; }
    public System.DateTime UpdateDate { get; set; }
    public Nullable<bool> Weight { get; set; }
    public Nullable<bool> Quantity { get; set; }

    public virtual ICollection<OrderLine> OrderLineQuantity { get; set; }
    public virtual ICollection<OrderLine> OrderLineWeight { get; set; }

我的强类型剃刀视图中有(简化的)以下内容:

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>Unit</legend>

    <table>
        <tr>
            <td>@Html.LabelFor(model => model.Weight)</td>
            <td>@Html.LabelFor(model => model.Quantity)</td>
        </tr>
        <tr>
            <td>
                @Html.RadioButton("unitType", "false", "Weight")
                @Html.ValidationMessageFor(model => model.Weight)
            </td>
            <td>
                @Html.RadioButton("unitType", "false", "Quantity")
                @Html.ValidationMessageFor(model => model.Quantity)
            </td>
        </tr>
    </table>
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>

}

我遇到的问题是,当我将帖子调试回控制器时,单选按钮的值为空。我有点困惑,因为我认为我在视图中正确命名了控件。有人可以帮我将值正确地发回控制器。提前致谢。

4

1 回答 1

1

使用RadioButtonFor,这将正确连接表单命名。

@Html.RadioButtonFor(model => model.Weight, "true")
@Html.RadioButtonFor(model => model.Quantity, "true")

(如果你想使用 plain RadioButton,第一个参数应该是属性名称,比如@Html.RadioButton("Weight", "true")。但是如果在嵌套类和局部视图等情况下变得更复杂,这就是为什么建议使用上述强类型形式的原因。)


编辑 由于单选按钮需要在同一组中,因此必须调整视图模型。

@Html.RadioButtonFor(model => model.UnitType, "Weight")
@Html.RadioButton(model => model.UnitType, "Quantity")

因此模型需要该UnitType属性,但如果您仍需要使用Weightand Quantity,则可以将它们设置为更新:

private string _unitType;

public string UnitType 
{
    get { return _unitType; }
    set
    {
        _unitType = value;
        Weight = (_unitType ?? "").Equals("Weight", StringComparison.CurrentCultureIgnoreCase);
        Quantity = (_unitType ?? "").Equals("Quantity", StringComparison.CurrentCultureIgnoreCase);
    }
}
于 2012-09-15T03:58:32.933 回答