Asp.net mvc asp.net mvc3 jquery ui对话框和客户端验证

Asp.net mvc asp.net mvc3 jquery ui对话框和客户端验证,asp.net-mvc,validation,jquery-ui,dialog,Asp.net Mvc,Validation,Jquery Ui,Dialog,我对asp.net mvc3应用程序中的客户端验证有问题 我的代码看起来: function loadEditCategoryDialog(categoryId) { $.ajax({ url : "/rovastamp3/Admin/CategoryEditDialog", data : "categoryId="+categoryId, success : function(data){ $("#popup_di

我对asp.net mvc3应用程序中的客户端验证有问题

我的代码看起来:

function loadEditCategoryDialog(categoryId) {
    $.ajax({
        url : "/rovastamp3/Admin/CategoryEditDialog",
        data : "categoryId="+categoryId,
        success : function(data){
            $("#popup_dialog").html(data);
            $("#popup_dialog").dialog({        
                modal: true,
                draggable: false,
                resizable: false,
                title: "Upravit kategorii",
                width: 600,
                height: 500,
            });                             
        }
    });
 }
控制器:

[HttpGet]
public ActionResult CategoryEditDialog(int categoryId)
{
    CategoryEditViewModel categoryEditViewModel = new CategoryEditViewModel();
    categoryEditViewModel.Category = _postAuctionCategoryRepo.Query()
        .SingleOrDefault(x => x.Id == categoryId);

    return PartialView(categoryEditViewModel);
}

[HttpPost]
public ActionResult CreateNewCategory(CategoryEditViewModel categoryEditViewModel)
{
    if (ModelState.IsValid)
    {
        return RedirectToAction("Index");
    }
    return View("CategoryEditDialog", categoryEditViewModel);
}
最后,我的部分观点是:

@model Rovastamp.MVC3.ViewModels.AdminController.CategoryEditViewModel
<h2>Upravit kategorii @Model.Category.Name</h2>
@{Html.EnableClientValidation();}
@using (Html.BeginForm("CreateNewCategory", "Admin"))
{ 
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Objednávkový formulář</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Category.Name) 
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.Category.Name) 
            @Html.ValidationMessageFor(model => model.Category.Name) 
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Category.Position) 
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.Category.Position) 
            @Html.ValidationMessageFor(model => model.Category.Position) 
        </div>

        <input  type="submit" value="Upravit" class="submit_button" />               
    </fieldset>
}

在我调用jquery ui对话框和客户端验证之前,它工作得非常好。

您是否为客户端验证包含了适当的JavaScript文件


执行提交操作时,请检查JavaScript控制台,我敢打赌那里有一个错误导致JavaScript出错,然后表单的默认提交操作开始执行。

这是因为您正在将PartialView加载到一个已经由jquery.validator.Unstructive库解析过的视图中。您需要指示库重新解析页面,以考虑注入的PartialView验证属性。阅读我关于这个主题的文章,希望它能回答你的问题。

我为这个问题苦苦挣扎, 几个小时后,我得出结论,jQuery在表单元素之外呈现DIALOG HTML元素。 由于jQuery.Validation插件只在表单元素中工作, 有必要返回表单范围内的对话框,这可以通过以下打开事件处理完成:

  $('#dialogDivId').dialog({
      autoOpen: false,
      width: 500,
      height: 500,
      minheight: options.minheight,
      minwidth: options.minwidth,
      modal:false,
      open: function (type, data) {
             $(this).appendTo($('form')); // reinsert the dialog to the form
      }   // And Solve your validation inside Jquery dialog
});

除了像这样连接提交按钮之外

    $("#SubmitButton").click(function(){
    if (!$("#editForm").valid()){
        return false;
    }
      });
您需要指定要解析的html表单,使用默认构造函数对我不起作用

$.validator.unobtrusive.parse("#editForm");   

我正在试图找出一种方法,这样你就不必在每个表单上连接每个提交按钮,如果我找到了一种方法,我会在这里发布。

你可能需要
MicrosoftAjax.js
MicrosoftMvcAjax.js
?不过我不确定。我还没有机会使用不引人注目的jquery逻辑。+1希望我能给你更多的帮助。正是我所需要的。@gnome:)你可以打开他的个人资料,投票给他所有的答案和问题,一切都很好possible@Omu当前位置尽管这意味着所有投票都可能被视为无效,因为这些投票可能被视为选票欺诈。所以我不推荐它。正如Jonathan的回答所指出的,直到我指定了解析所需的精确形式,这才对我起作用。i、 e.
$.validator.unobtrusive.parse(“#editForm”)这是正确的问题,但会干扰对话框UI。我用:
open:function(type,data){$(this.wrap(“”;}
$.validator.unobtrusive.parse("#editForm");