Изисква се проверка на диалоговия прозорец на Jquery от страна на клиента!! полета с asp.net mvc2

Заредих динамично формуляр в диалогов прозорец на jquery ui. Сега искам да добавя валидиране от страна на клиента към този диалогов прозорец. Опитах блога на Скот Гу и той работи добре и добре, но не засяга диалоговия прозорец (няма съобщение за грешка „Изисква се заглавие“, когато използвам формуляр в диалоговия прозорец), когато просто използвам нормалния Url. Опитах jquery.validate с правила и съобщения, подобни на отговора на въпрос Mvc2 Валидиране от страна на клиента в рамките на Jquery модален диалог? и това все още не показва нищо различно в диалоговия прозорец и когато щракна върху бутона за изпращане, той все още казва Успешно. (Сигурен съм, че съм на правилната линия с това)

Мога да манипулирам помощните класове, за да предотвратя въвеждането на по-голяма максимална дължина, но неговата минимална дължина и задължителните полета с данни, с които се боря. Опитах да използвам всички javascripts, за които мога да се сетя като MvcJQueryValidation, но все още нищо.

Моля, помогнете на всеки, благодаря ви


person porps89    schedule 28.06.2011    source източник


Отговори (1)


Ето пример как можете да продължите. Както винаги започнете с модел на изглед, който ще представя данните на формуляра вътре в частичния:

public class MyViewModel
{
    [Required]
    public string Foo { get; set; }
    public string Bar { get; set; }
}

След това контролер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Dialog()
    {
        return PartialView(new MyViewModel());
    }

    [HttpPost]
    public ActionResult Dialog(MyViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        // TODO: the model is valid => process ...
        return Json(new { success = "thanks for submitting" });
    }
}

и накрая гледките.

~/Views/Home/Index.aspx:

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<script type="text/javascript" src="<%: Url.Content("~/scripts/jquery-1.4.1.js") %>"></script>
<script type="text/javascript" src="<%: Url.Content("~/scripts/jquery-ui-1.8.11.js") %>"></script>
<script type="text/javascript" src="<%: Url.Content("~/scripts/MicrosoftAjax.js") %>"></script>
<script type="text/javascript" src="<%: Url.Content("~/scripts/MicrosoftMvcValidation.js") %>"></script>
<script type="text/javascript">
    $(function () {
        $('#show').click(function () {
            $('#dialog').load(this.href, function (result) {
                Sys.Mvc.FormContext._Application_Load();
                $('#myForm').submit(function () {
                    if (!Sys.Mvc.FormContext.getValidationForForm(this).validate('submit').length) {
                        $.post(this.action, $(this).serialize(), function (data) {
                            if (data.success) {
                                alert(data.success);
                                $('#dialog').dialog('close');
                            } else {
                                $('#dialog').html(data);
                            }
                        });
                    }
                    return false;
                });
            }).dialog({ autoOpen: true });
            return false;
        });
    });
</script>

<%= Html.ActionLink("Show jquery dialog", "Dialog", null, new { id = "show" })%>

<div id="dialog"></div>

</asp:Content>

и накрая частичното (~/Views/Home/Dialog.ascx):

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.MyViewModel>" %>

<% Html.EnableClientValidation(); %>

<% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" })) { %>
    <div>
        <%= Html.EditorFor(x => x.Foo)%>
        <%= Html.ValidationMessageFor(x => x.Foo) %>
    </div>
    <div>
        <%= Html.EditorFor(x => x.Bar)%>
        <%= Html.ValidationMessageFor(x => x.Bar) %>
    </div>
    <input type="submit" value="OK" />
<% } %>

Важната част се случва, след като диалоговият прозорец се зареди и формулярът се инжектира в DOM => трябва да анализирате отново правилата за валидиране, като използвате метода Sys.Mvc.FormContext.getValidationForForm.

person Darin Dimitrov    schedule 28.06.2011