2011-05-24 118 views
3

我有一個模型多個表單元素綁定到一個模型屬性

public class Foo 
{ 
    public string bar { get; set; } 
    //Other stuff 
} 

我認爲,我需要呈現與兩個單選按鈕的用戶和一個下拉列表,下拉列表充當組中的第三個單選按鈕。

<%= Html.RadioButtonFor(m => m.bar, "A") %> 
<%= Html.RadioButtonFor(m => m.bar, "B") %> 
<%= Html.DropDownListFor(m => m.bar, ViewData["OtherUncommonOptions"] as SelectList)%> 

這個問題的最佳方法是什麼?

對於該視圖,我非常有信心jQuery可以確保只爲bar選擇了一個值。但是,如果可以避免這會更好。

在控制器方面,我對如何去約束這個問題有點失落?

回答

1

型號:

public class Foo 
{ 
    public string Bar { get; set; } 
} 

控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     ViewData["OtherUncommonOptions"] = new SelectList(
      Enumerable.Range(1, 5).Select(x => new SelectListItem 
      { 
       Value = x.ToString(), 
       Text = "item " + x 
      }), 
      "Value", 
      "Text" 
     ); 
     return View(new Foo()); 
    } 

    [HttpPost] 
    public ActionResult Index(Foo model) 
    { 
     // model.Bar will contain the selected value here 
     return View(model); 
    } 
} 

查看:

<% using (Html.BeginForm()) { %> 
    <%= Html.RadioButtonFor(m => m.Bar, "A", new { id = "barA" }) %> 
    <%= Html.RadioButtonFor(m => m.Bar, "B", new { id = "barB" }) %> 
    <%= Html.DropDownListFor(
     m => m.Bar, 
     ViewData["OtherUncommonOptions"] as SelectList, 
     "-- value --", 
     new { id = "barDDL" } 
    ) %> 

    <input type="submit" value="OK" /> 
<% } %> 

而最後一部分將是確保使用JavaScript,如果兩個單選按鈕中的一個選擇下拉列表清除其值,並且如果在下拉列表中選擇了收音機的值ns被取消選擇。

$(function() { 
    $('#barA, #barB').click(function() { 
     $('#barDDL').val(''); 
    }); 

    $('#barDDL').change(function() { 
     if ($(this).val() != '') { 
      $('#barA, #barB').removeAttr('checked'); 
     } 
    }); 
}); 
相關問題