2008-11-04 36 views
12

Tôi đang cố gắng ra asp.net MVC cho một dự án mới, và tôi chạy qua một cái gì đó kỳ lạ. Khi tôi sử dụng trình trợ giúp giao diện người dùng MVC cho hộp văn bản, các giá trị được duy trì giữa các cuộc gọi. Nhưng, khi tôi sử dụng một loạt các nút radio, trạng thái đã chọn không được duy trì.asp.net mvc nút radio trạng thái

Đây là ví dụ từ chế độ xem của tôi.

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

Khi biểu mẫu được đăng lại, tôi xây dựng đối tượng có "ProviderType" là một trong các thuộc tính của nó. Giá trị trên đối tượng đang được thiết lập, và sau đó tôi RedirectToAction với nhà cung cấp làm đối số. Tất cả là tốt, và tôi kết thúc tại một URL như "http://localhost/Provider/List?ProviderType=1" với hiển thị ProviderType. Giá trị được tiếp tục với URL, nhưng trình trợ giúp UI không chọn trạng thái đã chọn.

Tôi đang gặp sự cố này với hộp danh sách, danh sách thả xuống và nút tắt. Hộp văn bản nhận các giá trị tốt. Bạn có thấy một cái gì đó tôi đang làm sai? Tôi giả định rằng những người giúp việc sẽ làm điều này cho tôi, nhưng có lẽ tôi sẽ phải tự chăm sóc nó. Tôi chỉ cảm thấy theo cách của tôi thông qua điều này, vì vậy đầu vào của bạn được đánh giá cao.

Chỉnh sửa: Tôi vừa tìm thấy ghi đè cho hàm tạo SelectList có giá trị được chọn. Điều đó đã giải quyết vấn đề thả xuống của tôi mà tôi đã đề cập ở trên.

Chỉnh sửa # 2: Tôi đã tìm được thứ gì đó hiệu quả, nhưng nó làm tôi khó chịu theo cách này. Tôi cảm thấy như thế này nên được suy ra.

<li> 
    <%=Html.RadioButton("ProviderType","1",Request["ProviderType"]=="1")%><label>Hospital</label> 
    <%=Html.RadioButton("ProviderType", "2", Request["ProviderType"] == "2")%><label>Facility</label> 
    <%=Html.RadioButton("ProviderType", "3", Request["ProviderType"] == "3")%><label>Physician</label> 
</li> 

Hy vọng rằng ai đó sẽ tìm ra cách khác.

+2

Tôi chưa gặp thêm bất kỳ vấn đề nào như thế này kể từ khi phát hành chính thức. Nó có thể là thứ gì đó với bản beta hay thứ gì đó mà tôi đã làm sai. Bất kể, tôi không nghĩ rằng câu hỏi này có liên quan nữa. –

Trả lời

1

Biểu mẫu không được đăng lên chuỗi truy vấn, trừ khi bạn quên chỉ định biểu mẫu dưới dạng phương thức = "POST". Bạn xác định biểu mẫu như thế nào? Bạn đang sử dụng ASP.NET MVC Beta?

0

Cũng hợp lý, nó sẽ không tồn tại, không có trạng thái phiên. Hãy nghĩ về nó như một trang hoàn toàn mới. Để có được các nút radio của bạn cư trú, bạn cần phải tồn tại trở lại một cái gì đó như ViewData ["ProviderType"] = 3 để có radiobutton repopulate với dữ liệu của nó.

3

gì bạn cần là một cái gì đó như thế này theo quan điểm của bạn:

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

Và sau đó trong điều khiển của bạn có thế này:

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(); 

Lớp Provider sẽ được cái gì như thế này:

public class Provider 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public bool IsSelected { get; set; } 
} 
6

Nếu bạn cung cấp cho các nút radio cùng tên với thuộc tính trên mẫu của bạn, thì MVC sẽ tự động đặt ch thuộc tính ecked trên nút thích hợp.

Tôi nghĩ điều này dựa vào việc có một Mô hình được đánh máy mạnh mẽ.

1

Tôi đang sử dụng VS2010 bây giờ, nó hoạt động như:

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

trông tốt hơn?

-1

Xem:

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

Bộ điều khiển:

public ActionResult GetType(FormCollection collection) 
{ 
string type=collection.Get("providerType"); 

    if(type=="1") 
    //code 
    else if(type=="2") 
    //code 
    else 
    //code 

return View(); 
} 
0

Tôi đã thực hiện phần mở rộng này Helper HTML:

<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 

Sau đó, trong giao diện:

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

Trong bộ điều khiển tùy chọn được ánh xạ Automagically bằng cách sử dụng tiêu chuẩn:

UpdateModel(Provider) 

trình như một say mê. Nếu bạn là kẻ thù, thay đổi đánh dấu được tạo ra.

Các vấn đề liên quan