2009-12-09 29 views
6

Tôi có chế độ xem mvc được tạo thành từ ma trận nút radio. Mỗi hàng của các nút radio nằm trong một nhóm và đại diện cho một đối tượng đã nhập từ mô hình. Sử dụng hướng dẫn của các blog và bài đăng khác nhau, tôi đã gắn kết thành công các kết quả của biểu mẫu đã đăng lên mảng mô hình đã nhập trong hành động điều khiển, tuy nhiên dường như không thể đảo ngược hiệu quả và liên kết mô hình hiện có với nút radio trong khi vẫn giữ trạng thái đã chọn hoặc không được chọn .ASP.NET MVC Cách liên kết dữ liệu hai chiều của mô hình với danh sách nút radio bằng kiểu được nhập

Mô hình của tôi có chứa thuộc tính có tên "Trả lời" nằm trong khoảng từ 0 đến 4 và phải khớp với tên radio. Tôi đã thử thay đổi giá trị chỉ mục thành giá trị mô hình "AnswerId" nhưng khi làm như vậy, ràng buộc đang hoạt động không còn hoạt động nữa (tôi tin rằng chỉ mục phải bằng 0). Dưới đây là một số tài nguyên tôi đã sử dụng cho đến thời điểm này Post và một số Article by Scott Hanselman để đến nơi tôi đang ở.

Nếu có ai có bất kỳ thông tin chi tiết nào về cách thực hiện liên kết hai chiều này, nó sẽ được đánh giá cao.

Cảm ơn

điều khiển của tôi:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Save([Bind(Prefix = "SurveyAnswer")] SurveyAnswer[] responses, int SurveyID) 
    { 

Xem của tôi:

<% 
    int questionIndex = 0; 
    foreach (SurveyAnswer q in Model) 
    { 

%> 
    <%=Html.Hidden("SurveyAnswer.Index", questionIndex)%> 
    <%=Html.Hidden("SurveyAnswer["+questionIndex+"].AnswerId", q.AnswerId) %> 
    <tr> 
    <td style='background-color: #aaaaaa;padding-left: 10px; padding-right: 10px;border-right: solid 1px #fffff;'><%= questionIndex+1 %></td> 
    <td style='text-align: right;'><%= q.Question.DisplayValue %></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "0", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue"})%></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "1", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "2", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "3", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue"})%></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "4", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td> 
    </tr> 
<% 
    questionIndex++; 
    } 
%> 

Trả lời

6

Các Radio Button tự nó không nhận ra giá trị (về mặt nhà nước) khác với True/False. Vì vậy, bạn sẽ phải so sánh giá trị với vị trí thực tế và đặt rõ ràng trạng thái TRUE/FALSE.

Hãy thử với quá tải này của trình trợ giúp nút radio.

<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "0", q.AnswerValue == 0)%> 
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "1", q.AnswerValue == 1)%> 
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "2", q.AnswerValue == 2)%> 
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "3", q.AnswerValue == 3)%> 
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "4", q.AnswerValue == 4)%> 

Nếu bạn đang sử dụng ViewModel, có thể tốt hơn nên đặt câu hỏi logic này (q.AnswerValue == 4) vào đó thay vì trực tiếp trong chế độ xem.

PS: Tôi nghĩ bạn có thể loại bỏ các tham số cuối cùng là người đầu tiên đã thiết lập ID và tên atributes tới: "SurveyAnswer[" + questionIndex + "].AnswerValue"

+1

Nếu tôi đang sử dụng khuôn khổ tổ chức và đơn vị thiết lập được tạo ra, những gì sẽ là một phương pháp tốt cho việc mở rộng điều này để giữ logic được đề xuất của bạn. Cảm ơn sự giúp đỡ cho đến nay. Dường như làm việc. – Jeremy

+0

Nếu bạn không sử dụng mô hình ViewModel, có thể tốt hơn là để nó như thế, vì nó sẽ liên quan đến việc thay đổi một số logic của bộ điều khiển, kiểu mô hình phổ biến ở chế độ xem và có thể quy trình xác nhận của bạn. Phần lớn được sử dụng khi bạn có các mô hình phức tạp (như 2 hoặc nhiều tập hợp thực thể được kết hợp thành một biểu mẫu duy nhất hoặc để thiết lập SelectList/RadioButtons/..), nếu bạn muốn o, hãy xem thêm mẫu này xem http: // geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx hoặc phần "Sử dụng mẫu ViewModel" của ScottGu trong cuốn sách ASP.NET MVC 1.0 của anh ấy. – JOBG

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