2012-10-29 117 views
4

首先,我必須在mvc3局部視圖中創建一些單選按鈕。MVC3(剃刀)單選按鈕檢查

當我在屏幕上時,我只需要選擇一個單選按鈕並檢索特定值。

我該如何做到這一點(例如用JS或C#)?

  <div id="UserDeleteInfosField"> 
       <p> 
        @Html.RadioButton("HasUserLeave", new { id = "rb1" }) 
        @UserAccountResources.UserLeave 
        @Html.HiddenFor(x => x.UserLeave) 
       </p> 
       <br /> 
       <p> 
        @Html.RadioButton("HasUserTransfer", new { id = "rb2" }) 
        @UserAccountResources.UserTransfer 
        @Html.HiddenFor(x => x.UserTransfer) 
       </p> 
       <br /> 
       <p> 
        @Html.RadioButton("HasUserDetachment", new { id = "rb3" }) 
        @UserAccountResources.UserDetachment 
        @Html.HiddenFor(x => x.UserDetachment) 
       </p> 
       <br /> 
       <p> 
        @Html.RadioButton("HasUserRetirement", new { id = "rb4" }) 
        @UserAccountResources.UserRetirement 
        @Html.HiddenFor(x => x.UserRetirement) 
       </p> 
       <br /> 
       <p> 
        @Html.RadioButton("HasUserStatus", new { id = "rb5" }) 
        @UserAccountResources.UserStatus 
        @Html.HiddenFor(x => x.UserStatus) 
       </p> 
      </div> 

在此先感謝!

Ars_n

回答

5

看例子就明白了單選按鈕的分組方式:example

你需要SAM Ëname屬性,喜歡這裏:

<input type="radio" name="group2" value="Water" /> Water<br /> 
<input type="radio" name="group2" value="Beer" /> Beer<br /> 
<input type="radio" name="group2" value="Wine" checked /> Wine<br /> 

你舉的例子:

@Html.RadioButton("SameGroup", "rb1") 
@Html.RadioButton("SameGroup", "rb2") 
@Html.RadioButton("SameGroup", "rb3") 
@Html.RadioButton("SameGroup", "rb4") 
@Html.RadioButton("SameGroup", "rb5") 

只有最好的您將收到控制器行動崗位價值。

+0

您可能還想生成[帶有唯一ID的標籤](http://www.codeproject。com/Articles/611175/Radio-Buttons-for-List-Items-in-MVC-Problem-with),因此單擊'Water'等實際上選擇了單選按鈕。 – KyleMit

8

所以你需要一組單選按鈕?我爲此使用了一個自定義助手。

代碼助手:

public static MvcHtmlString RadioButtonForSelectList<TModel, TProperty>(
     this HtmlHelper<TModel> htmlHelper, 
     Expression<Func<TModel, TProperty>> expression, 
     IEnumerable<SelectListItem> listOfValues) 
    { 
     var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 
     var sb = new StringBuilder(); 

     if (listOfValues != null) 
     { 
      // Create a radio button for each item in the list 
      foreach (SelectListItem item in listOfValues) 
      { 
       // Generate an id to be given to the radio button field 
       var id = string.Format("{0}_{1}", metaData.PropertyName, item.Value); 

       // Create and populate a radio button using the existing html helpers 
       var label = htmlHelper.Label(id, HttpUtility.HtmlEncode(item.Text)); 

       var radio = htmlHelper.RadioButtonFor(expression, item.Value, new { id = id }).ToHtmlString(); 

       if (item.Selected) 
       { 
        radio = htmlHelper.RadioButtonFor(expression, item.Value, new { id = id, @checked = "checked", }).ToHtmlString(); 
       } 


       // Create the html string that will be returned to the client 
       // e.g. <input data-val="true" data-val-required="You must select an option" id="TestRadio_1" name="TestRadio" type="radio" value="1" /><label for="TestRadio_1">Line1</label> 
       sb.AppendFormat("<div class=\"RadioButton\">{0}{1}</div>", radio, label); 
      } 
     } 

     return MvcHtmlString.Create(sb.ToString()); 
    } 

現在在你看來,你可以只使用:

@Html.RadioButtonForSelectList(model => model.yourproperty, Model.listUsedToPopulate) 

現在,你只能夠檢查當時的單選按鈕之一。選中的值存儲在model.your屬性中。

+0

感謝您的回答。 最後,我選擇了另一種解決方案(組單選按鈕)。 –

+0

總是樂於幫忙 – middelpat

+0

這是一個很好的解決方案。謝謝。 – SamJolly

1

我猜你要發佈這一個控制器方法,所以也許這就是你正在嘗試做的:

假設控制器方法接受一個名爲myParameter參數,那麼你就需要設置單選按鈕一樣將它們分組的名稱,然後設置任何你所需要的值:

<div id="UserDeleteInfosField"> 
    <p> 
     @Html.RadioButton("myParameter", UserAccountResources.UserLeave) 
     @UserAccountResources.UserLeave 
     @Html.HiddenFor(x => x.UserLeave) 
    </p> 
    <br /> 
    <p> 
     @Html.RadioButton("myParameter", UserAccountResources.UserTransfer) 
     @UserAccountResources.UserTransfer 
     @Html.HiddenFor(x => x.UserTransfer) 
    </p> 
    <br /> 
    <p> 
     @Html.RadioButton("myParameter", UserAccountResources.UserDetachment) 
     @UserAccountResources.UserDetachment 
     @Html.HiddenFor(x => x.UserDetachment) 
    </p> 
    <br /> 
    <p> 
     @Html.RadioButton("myParameter", UserAccountResources.UserRetirement) 
     @UserAccountResources.UserRetirement 
     @Html.HiddenFor(x => x.UserRetirement) 
    </p> 
    <br /> 
    <p> 
     @Html.RadioButton("myParameter", UserAccountResources.UserStatus) 
     @UserAccountResources.UserStatus 
     @Html.HiddenFor(x => x.UserStatus) 
    </p> 
</div> 
0

感謝您的回答。

我終於爲每個單選按鈕創建一個組。 然後我調用rb對象參數中的屬性。

  <div id="UserDeleteInfosField"> 
       <p> 
        @Html.RadioButton("RbDeleteGroup", Model.UserLeave) 
        @UserAccountResources.UserLeave 
        @Html.HiddenFor(x => x.UserLeave) 
       </p> 
       <br /> 
       <p> 
        @Html.RadioButton("RbDeleteGroup", Model.UserTransfer) 
        @UserAccountResources.UserTransfer 
        @Html.HiddenFor(x => x.UserTransfer) 
       </p> 
       <br /> 
       <p> 
        @Html.RadioButton("RbDeleteGroup", Model.UserDetachment) 
        @UserAccountResources.UserDetachment 
        @Html.HiddenFor(x => x.UserDetachment) 
       </p> 
       <br /> 
       <p> 
        @Html.RadioButton("RbDeleteGroup", Model.UserRetirement) 
        @UserAccountResources.UserRetirement 
        @Html.HiddenFor(x => x.UserRetirement) 
       </p> 
       <br /> 
       <p> 
        @Html.RadioButton("RbDeleteGroup", Model.UserStatus) 
        @UserAccountResources.UserStatus 
        @Html.HiddenFor(x => x.UserStatus) 
       </p> 
      </div> 

所以在這種情況下,我只能同時檢查一個單選按鈕,並從相應的ViewModel中檢索屬性值。

[Display(Name = "UserAccountDeleteInfos", ResourceType = typeof(UserAccountResources))] 
    public string UserLeave 
    { 
     get { return UserAccountResources.UserLeave; } 
    }