Проверка JQuery на стороне клиента на "Требуется !!поля с asp.net mvc2 - PullRequest
0 голосов
/ 28 июня 2011

Я загрузил форму динамически в диалоговое окно jquery ui.Теперь я хочу добавить в этот диалог проверку на стороне клиента.Я пробовал блог Скотта Гу, и все это работает хорошо, но не влияет на диалог (сообщение об ошибке «Заголовок не требуется», когда я использую форму в диалоге), когда я просто использую обычный URL.Я пробовал jquery.validate с правилами и сообщениями, похожими на ответ на вопрос Mvc2 Client Side Validation в модальном диалоговом окне Jquery?и это все еще не показывает ничего другого в диалоге, и когда я нажимаю кнопку отправки, он все еще говорит Успешно.(Я уверен, что я на правильном пути с этим)

Я могу манипулировать вспомогательными классами, чтобы предотвратить ввод максимальной максимальной длины, но его минимальную длину и необходимые поля данных, с которыми я борюсь.Я пытался использовать все javascripts, которые я мог придумать, как MvcJQueryValidation, но все еще ничего.

Пожалуйста, помогите всем спасибо

1 Ответ

1 голос
/ 28 июня 2011

Вот пример того, как вы можете продолжить.Как всегда, начните с модели представления, которая будет представлять данные формы внутри партиала:

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.

...