2010-11-15 24 views
6

Tôi hiện đang sử dụng ASP.NET MVC3 RC và tôi đang sử dụng các xác thực JQuery không phô trương như được mô tả bởi Brad Wilson trên his blog. Nó hoạt động tốt nhưng khi tôi gửi biểu mẫu của tôi (trong Ajax) tới máy chủ, tôi thực hiện một số xác nhận hợp lệ phía máy chủ và trả về cùng hàng (được bao gồm trong một phần xem) nếu trạng thái mô hình của tôi không hợp lệ. 2 vấn đề với điều đó:PartialView và xác thực khách hàng không phô trương không hoạt động

Lần đầu tiên: Khi tôi thực hiện một hành động của mình là return PartialView, tất cả các thuộc tính không phô trương đều không được hiển thị. Tôi tìm thấy một cách "không thanh lịch" để làm điều đó nhưng khi tôi làm điều đó, xác nhận khách hàng bị hỏng. Sau khi tôi quay trở lại từ hành động của mình, ngay cả khi tôi gọi jQuery.validator.unobtrusive.parse() trên hàng được cập nhật của mình, $("form").valid() luôn trả về true ngay cả khi không phải như vậy.

Thứ hai: Tôi muốn chế độ xem được hiển thị của tôi hiển thị dưới dạng chuỗi trên máy chủ để tôi có thể gửi lại trong một JsonResult (ví dụ: myJSonResult.html=RenderPartialToString("partialName",model)).

Có một tài liệu tham khảo, có quan điểm của tôi (editInvitation):

<td> 
    <%= Html.HiddenFor(x=>x.ID,new{id="ID"}) %> 
    <%= Html.HiddenFor(x=>x.GroupID,new{id="GroupID"}) %> 
    <%: Html.TextBoxFor(x => x.Name, new { id = "Name" })%><%:Html.ValidationMessageFor(x=>x.Name) %> 
</td> 
<td> 
    <%: Html.TextBoxFor(x => x.Email, new { id = "Email" })%> <%:Html.ValidationMessageFor(x=>x.Email) %> 
</td> 
<td> 
    <%: Model.Status.ToFriendlyName()%> 
</td> 
<td> 
    <%= InvitationsViewModel.RenderActions(Model, Html, InvitationsViewModel.CreateRowID(Model.ID))%> 
</td> 

Và hành động điều khiển của tôi:

if (TryUpdateModel(invitation)) 
{ 
    validModel = true; 
    //Other stuff 
} 
if (Request.IsAjaxRequest()) 
{ 
    //TODO : I return a partial view but I would prefer to return a JSonResult with the rendered view as a string in an Property of my JSon result 
    return PartialView(validModel ? "DisplayInvitation" : "EditInvitation", invitation); 
} 

Cảm ơn

Trả lời

4

cuối cùng tôi làm cho nó làm việc. Đây là cách:

HtmlHelper helper = GetHelper(); 
MvcHtmlString partialView = helper.Partial("myView" , model); 
var result = new { success = ModelState.IsValid, html = partialView.ToString() }; 
return Json(result); 

Có chức năng helper:

protected HtmlHelper GetHelper() 
{ 
    return GetHelper(string.Empty); 
} 
protected HtmlHelper GetHelper(string formID) 
{ 
    HtmlHelper helper = new HtmlHelper(getViewContext(formID), new ViewPage { ViewData = this.ViewData }); 
    helper.EnableClientValidation(isClientValidationEnabled()); 
    helper.EnableUnobtrusiveJavaScript(isUnobtrusiveJavascriptEnabled()); 
    return helper; 
} 
private ViewContext getViewContext(string formID) 
{ 
    var vc = new ViewContext(this.ControllerContext, new WebFormView(this.ControllerContext, "~/Views/Home/Index.aspx"), this.ViewData, new TempDataDictionary(), new System.IO.StringWriter()); 
    vc.UnobtrusiveJavaScriptEnabled = isUnobtrusiveJavascriptEnabled(); 
    vc.ClientValidationEnabled = isClientValidationEnabled(); 
    vc.FormContext = new FormContext { FormId = formID }; 
    return vc; 
} 

Tôi không chắc đó là cách tốt nhất để làm điều đó nhưng nó làm việc cho tôi. Hãy hy vọng nhóm ASP.NET MVC sẽ cung cấp một cách dễ dàng hơn để hiển thị một dạng xem như một chuỗi.

Cảm ơn

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