2012-09-15 64 views
0

我在我的mvc3應用程序中有以下模型。我想在視圖上有兩個單選按鈕,它們映射到Weight和Quantity(這些是數據庫中的位域)。MVC3 Html.RadioButton statpost回到控制器

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; } 

我有(簡體)按照我的強類型Razor視圖:

@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> 

}

我遇到的問題是,當我調試後回控制器值對於單選按鈕是空的。我有點困惑,因爲我認爲我已經在視圖中正確命名了控件。有人可以幫助我正確地將值發回控制器。提前致謝。

回答

1

使用RadioButtonFor,這將正確連接表單命名。

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

(如果你想使用純RadioButton,第一個參數應該是財產的名稱,如@Html.RadioButton("Weight", "true")。但是,如果在情況下,像嵌套類和部分景色變得更加複雜,這就是爲什麼它是建議使用如上述的強類型化的形式。)


編輯由於單選按鈕必須在同一組中,視圖模型必須進行調整。

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

所以模型需要的UnitType屬性,但如果你仍然需要使用WeightQuantity,然後他們可以設置更新:

private string _unitType; 

public string UnitType 
{ 
    get { return _unitType; } 
    set 
    { 
     _unitType = value; 
     Weight = (_unitType ?? "").Equals("Weight", StringComparison.CurrentCultureIgnoreCase); 
     Quantity = (_unitType ?? "").Equals("Quantity", StringComparison.CurrentCultureIgnoreCase); 
    } 
} 
+0

謝謝,但並不把單選按鈕同樣的一組,所以當我選擇一個我也可以選擇其他。這就是爲什麼我沒有使用RadioButtonFor。有沒有辦法可以使用RadioButtonFor,但都在同一組? – user1476207

+0

@ user1476207對不起,完全錯過了。更新了我的答案。 – McGarnagle