Tôi đã đọc rất nhiều về vấn đề này, nhưng tôi không thể hiểu được.ASP.NET MVC DropDownList Selected Value Problem
Tôi có danh sách thả xuống trên chế độ xem được sử dụng để phân trang. Bạn chọn trang bạn muốn truy cập và biểu mẫu được gửi. Khi xem được trả lại, trang được yêu cầu được hiển thị. Danh sách thả xuống thay đổi để phản ánh trang mới được hiển thị. Điều này làm việc tốt.
Vấn đề của tôi là: Tôi có 2 nút gửi, một cho trang tiếp theo và một cho trang trước. Trong bộ điều khiển, nếu một trong các lần gửi được nhấn, trang # phải được tăng hoặc giảm đi 1. Điều này đang xảy ra và trang dữ liệu chính xác đang được hiển thị. Tuy nhiên, danh sách thả xuống sẽ không, KHÔNG VẤN ĐỀ GÌ TÔI LÀM, phản ánh số trang mới khi chế độ xem được hiển thị.
Về cơ bản, nếu trình đơn thả xuống được thay đổi bởi người dùng, nó sẽ phản ánh những thay đổi đó khi nó được gửi lại sau khi gửi biểu mẫu. Nếu tôi thay đổi trang # theo chương trình, trình đơn thả xuống sẽ không thay đổi, ngay cả khi trang dữ liệu chính xác được hiển thị.
Dưới đây là phương pháp hành động:
public ActionResult Results(TechSearch search, string NextPage, string PrevPage)
{
if (NextPage != null) search.Page++;
if (PrevPage != null) search.Page--;
int resultCount = search.GetResultCount(Desk);
List<int> pages = new List<int>();
int pageCount = (int)Math.Ceiling((decimal)resultCount/search.PageSize);
for (int i = 1; i <= pageCount; i++) pages.Add(i);
ViewData["pages"] = new SelectList(pages, search.Page);
ViewData["pageCount"] = pageCount;
return View(search);
}
Và đây là phần có liên quan của quan điểm:
<input type="submit" value="<" name="PrevPage" />
Page
<%=Html.DropDownList("Page",(SelectList)ViewData["pages"]) %>
of
<%=ViewData["pageCount"]%>
<input type="submit" value=">" name="NextPage" />
Xin vui lòng giúp.
EDIT
Trang 333 của Pro ASP.NET MVC Framework by Steven Sanderson:
Làm thế nào điều khiển Input Nhận giá trị của họ
Mỗi [các Helpers HTML cho Rendering Input Controls] cố gắng populate bản thân bằng cách nhìn cho một giá trị ở các địa điểm sau, theo thứ tự này mức độ ưu tiên:
- ViewData.ModelState [ "controlName"]. Value.RawValue tham số
- giá trị truyền cho phương pháp helper HTML, hoặc nếu bạn đã gọi là tình trạng quá tải mà không bao gồm một tham số giá trị , sau đó ViewData .Eval ("controlName")
ModelState là một khu vực lưu trữ tạm thời rằng ASP.NET MVC sử dụng để duy trì giá trị cố gắng đến cộng ràng buộc và xác nhận lỗi. Lưu ý rằng nằm ở đầu danh sách ưu tiên, để giá trị của nó ghi đè mọi thứ bạn có thể đặt rõ ràng. Công ước này có nghĩa là bạn có thể chuyển một thông số giá trị rõ ràng để hoạt động như giá trị mặc định hoặc giá trị ban đầu của người trợ giúp là ; nhưng khi hiển thị lại chế độ xem sau khi lỗi xác thực , trình trợ giúp sẽ giữ lại mọi giá trị do người dùng nhập trong tùy chọn mặc định đó.
Tôi đã xác minh rằng ViewData.ModelState ["Trang"].RawValue chứa số trang không mong muốn đang làm phiền tôi. Cách tốt nhất để giải quyết vấn đề này là gì?
+1 Sử dụng chuỗi và mô hình ràng buộc thực sự tốt đẹp để thực hiện phân tích cú pháp có thể đọc được trong đó nút gửi được nhấn. –
@Dan - Cảm ơn. Tôi đã chọn nó từ Pro ASP.NET MVC Framework bởi Steven Sanderson trong phần trên Wizards và Multistep Forms (pg 396) –
Cuốn sách của Steven Sanderson rất tốt. – RichardOD