asp.net mvc radio button state

后端 未结 7 1868
轮回少年
轮回少年 2021-02-07 19:06

I\'m trying out asp.net mvc for a new project, and I ran across something odd. When I use the MVC UI helpers for textboxes, the values get persisted between calls. But, when I

相关标签:
7条回答
  • 2021-02-07 19:13

    View:

    <%=Html.RadioButton("providerType","1")%><label>Hospital</label>
    <%=Html.RadioButton("providerType","2")%><label>Facility</label>
    <%=Html.RadioButton("providerType","3")%><label>Physician</label>
    

    Controller:

    public ActionResult GetType(FormCollection collection)
    {
     string type=collection.Get("providerType");
    
      if(type=="1")
       //code
      else if(type=="2")
       //code
      else
       //code
    
     return View();
    }
    
    0 讨论(0)
  • 2021-02-07 19:20

    I'm using vs2010 now, it works like:

    <%=Html.RadioButton("ProviderType","1",Model.ProviderType==1)%><label>Hospital</label> 
    

    looks better?

    0 讨论(0)
  • 2021-02-07 19:24

    I've made this HTML Helper extension:

        <Extension()> _
        Public Function RadioButtonList(ByVal helper As HtmlHelper, ByVal name As String, ByVal Items As IEnumerable(Of String)) As String
            Dim selectList = New SelectList(Items)
            Return helper.RadioButtonList(name, selectList)
        End Function
    
        <Extension()> _
        Public Function RadioButtonList(ByVal helper As HtmlHelper, ByVal Name As String, ByVal Items As IEnumerable(Of SelectListItem)) As String
            Dim sb As New StringBuilder
            sb.Append("<table class=""radiobuttonlist"">")
            For Each item In Items
                sb.AppendFormat("<tr><td><input id=""{0}_{1}"" name=""{0}"" type=""radio"" value=""{1}"" {2} /><label for=""{0}_{1}"" id=""{0}_{1}_Label"">{3}</label></td><tr>", Name, item.Value, If(item.Selected, "selected", ""), item.Text)
            Next
            sb.Append("</table>")
            Return sb.ToString()
        End Function
    

    Then in the view:

    <%= Html.RadioButtonList("ProviderType", Model.ProviderTypeSelectList) %>
    

    In the controller the option is mapped automagically using the standard:

    UpdateModel(Provider)
    

    Works like a charm. If you are tablephobic, change the markup generated.

    0 讨论(0)
  • 2021-02-07 19:30

    The form shouldn't be posting to the querystring, unless you forgot to specify the form as method="POST". How are you specifying the form? Are you using ASP.NET MVC Beta?

    0 讨论(0)
  • 2021-02-07 19:31

    If you give the radio buttons the same name as the property on your model, then MVC will automatically set the checked attribute on the appropriate button.

    I think this relies on having a strongly typed Model.

    0 讨论(0)
  • 2021-02-07 19:36

    What you need is something like this in your view:

    <% foreach(var provider in (IEnumerable<Provider>)ViewData["Providers"]) { %>
        <%=Html.RadioButton("ProviderType", provider.ID.ToString(), provider.IsSelected)%><label><%=provider.Name%></label>
    <% } %>
    

    And then in your controller have this:

    var providers = GetProviders();
    int selectedId = (int) Request["ProviderType"]; // TODO: Use Int32.TryParse() instead
    foreach(var p in providers)
    {
        if (p.ID == selectedId)
        {
            p.IsSelected = true;
            break;
        }
    }
    ViewData["Providers"] = providers;
    return View();
    

    The Provider class will be something like this:

    public class Provider
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public bool IsSelected { get; set; }
    }
    
    0 讨论(0)
提交回复
热议问题