Tôi đã tìm thấy giải pháp liên quan đến việc tạo trình trợ giúp html mới. OP là đúng khi nói rằng đôi khi không thích hợp để sử dụng cùng một lớp làm tham số cho phương thức hành động cũng như trang xem. Đôi khi, chúng tôi muốn chuyển thông tin THÊM cho ViewPage so với những gì người dùng trả lại cho chúng tôi trong bài đăng biểu mẫu.
Các giải pháp tôi đưa ra là sử dụng một phương pháp mở rộng HtmlHelper, mà tôi gọi là HtmlHelperFor (T obj) mà tôi sử dụng như sau:
<% var productForm = Html.HtmlHelperFor(Model.Product); %>
và sau đó tôi sử dụng nó như dưới đây:
<%= productForm.TextBoxFor(x => x.Name) %>
phương pháp mở rộng là dưới đây:
public static HtmlHelper<T> HtmlHelperFor<T>(this HtmlHelper html, T model)
{
var newViewData = new ViewDataDictionary(html.ViewDataContainer.ViewData) { Model = model };
ViewContext newViewContext = new ViewContext(html.ViewContext.Controller.ControllerContext, html.ViewContext.View, newViewData, html.ViewContext.TempData, html.ViewContext.Writer);
var viewDataContainer = new ViewDataContainer(newViewContext.ViewData);
return new HtmlHelper<T>(newViewContext, viewDataContainer, html.RouteCollection);
}
các ViewDataContainer là một thực hiện các IVI giao diện ewDataContainer tìm thấy trong Sysetm.Web.Mvc:
public class ViewDataContainer : System.Web.Mvc.IViewDataContainer
{
public ViewDataContainer(System.Web.Mvc.ViewDataDictionary viewData)
{
ViewData = viewData;
}
public System.Web.Mvc.ViewDataDictionary ViewData { get; set; }
}
các cuộc gọi trên sẽ cho phép bạn có một đối tượng Product
như một phần của các thông số của phương pháp mà chấp nhận POST, thay vì một lớp học, trong đó có dự án mà bạn thường sẽ chuyển sang chế độ xem của bạn.
Nguồn
2010-06-02 14:12:16
Làm thế nào về một số ví dụ trong XForms áp dụng cho trường hợp của anh ấy. –
Bạn có thể đưa ra một mẫu ** thực ** của những gì bạn muốn làm không? Tôi không thực sự hiểu những gì bạn đang cố gắng đạt được (mô hình đầu vào và đầu ra?). –
Dmitriy Nagirnyak: Ý tưởng là bạn sử dụng một mô hình để điền vào chế độ xem. Bạn có thể không sử dụng cùng một mô hình để lưu dữ liệu từ chế độ xem. Họ là những mối quan tâm khác nhau. – BjartN