Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ajax调用asp.net MVC时模型的验证错误_C#_Asp.net Mvc_Asp.net Ajax - Fatal编程技术网

C# ajax调用asp.net MVC时模型的验证错误

C# ajax调用asp.net MVC时模型的验证错误,c#,asp.net-mvc,asp.net-ajax,C#,Asp.net Mvc,Asp.net Ajax,我如何在ajax调用上显示验证错误,因为它没有在ajax调用上显示错误。我已经附上了我的代码,请检查并告诉我哪里错了。我没有使用强模型绑定。如果没有ajax调用,它将显示模型错误,但是我想用ajax调用显示模型错误 型号 public class Feedback { [Required(ErrorMessage = "Comment field is required")] [Display(Name = "Comment")] [MaxLength(1000, Err

我如何在ajax调用上显示验证错误,因为它没有在ajax调用上显示错误。我已经附上了我的代码,请检查并告诉我哪里错了。我没有使用强模型绑定。如果没有ajax调用,它将显示模型错误,但是我想用ajax调用显示模型错误

型号

public class Feedback
{
    [Required(ErrorMessage = "Comment field is required")]
    [Display(Name = "Comment")]
    [MaxLength(1000, ErrorMessage = "Comment Cannot Be Longer Than 1000 Characters")]
    public string CommentText { get; set; }

    [Required(ErrorMessage = "Nme field is required")]
    [MaxLength(100, ErrorMessage = "Name Cannot Be Longer Than 100 Characters")]

    public string Name { get; set; }

    [Required(ErrorMessage = "Email field is required")]
    [MaxLength(150, ErrorMessage = "Email cannot be longer than 150 characters")]
    [RegularExpression(@"^[a-zA-Z-._0-9]+@[a-zA-Z]+\.[A-Za-z]+$", ErrorMessage = "Invalid Email Address")]
    public string Email { get; set; }

}
控制器

public ActionResult feedbackAndReview(Feedback feed)
{
    if(ModelState.IsValid)
    {
        //add to database

    }
    return View();
}
查看

<div class="row">
    <div class="col-md-6">
        <textarea class="form-control" id="CommentText" style="margin-bottom:10px;max-width:100%; height:139px;" placeholder="Your thoughts"></textarea>
    </div>
    <div class="col-md-6">
        <div class="row">
            <div class="col-md-12">
                <div class="form-group">
                    <input type="text" class="form-control" placeholder="Your Name" id="Name" />
                </div>
            </div>
            <div class="col-md-12">
                <div class="form-group">
                    <input type="email" placeholder="Enter Valid Email Address" class="form-control" id="Email" />
                </div>
            </div>
            <button type="button" onclick="submitReviewForm()" class="reviewBtn">POST REVIEW</button>
        </div>
    </div>
</div>

使用表单和绑定模型使其更容易

@model Feedback
<head
 <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
</head>
<form id="myform" method="post">
   <div class="row">
<div class="col-md-6">
    <textarea class="form-control" id="CommentText" style="margin-bottom:10px;max-width:100%; height:139px;" placeholder="Your thoughts"></textarea>
</div>
<div class="col-md-6">
    <div class="row">
        <div class="col-md-12">
            <div class="form-group">
                <input type="text" class="form-control" placeholder="Your Name" id="Name" />
            </div>
        </div>
        <div class="col-md-12">
            <div class="form-group">
                <input type="email" placeholder="Enter Valid Email Address" class="form-control" id="Email" />
            </div>
        </div>
        <input type="submit" value="Submit" id="btnSubmit" class="reviewBtn">POST REVIEW</button>
    </div>
    </div>
  </div>
  </form>


$('#myform').on('submit', function (e) {

    e.preventDefault();

   var ok = $(this).valid();

  if (ok) {

      var comment = $("#CommentText").val();
      var name = $("#Name").val();
      var email = $("#Email").val();

      $.ajax({
         type: 'post',
         url: '/Account/feedbackAndReview',
         data: {'CommentText' : comment , 'Name' : name , 'Email' : email },
         success : function (data)
         {
         }
     })
   }
}
@模型反馈

在你的ajax calli中添加一个错误处理程序我不知道你能帮我添加它吗?这是MVC的局限之一,也是为什么使用Angular这样的语言。在MVC中执行ajax调用时,您将失去模型功能,包括在模型反馈上使用数据注释@dcg评论是一条路,但是,如果您使用jQuery Untrusive,那么您必须在失败的回调方法中手动启动验证。@user10728126是的,我使用jQuery Untrusive,但它在ajax调用中没有显示错误,所以我如何手动启动验证?您是使用.cshtml查看还是仅使用标准html文件查看?如果您有一个.cshtml文件,jQuery unobtrusive将起作用,但您需要在视图中使用ValidationMessageFor。例如,如果将@Html.ValidationMessageFor(m=>m.CommentText)放在文本区域下方。要使其起作用,您还需要在CSHTML的顶部声明您的模型正在阻止窗体重新加载吗?而submit.yw!它阻止了默认行为的发生。所以从技术上讲,是的,这是如何让ajax调用启动,而不是表单的完整回发。请记住,在回调成功函数中,您将失去模型绑定功能。因此,如果您想将任何内容绑定回表单中的这些输入,则必须使用html追加手动执行。
@model Feedback
<head
 <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
</head>
<form id="myform" method="post">
   <div class="row">
<div class="col-md-6">
    <textarea class="form-control" id="CommentText" style="margin-bottom:10px;max-width:100%; height:139px;" placeholder="Your thoughts"></textarea>
</div>
<div class="col-md-6">
    <div class="row">
        <div class="col-md-12">
            <div class="form-group">
                <input type="text" class="form-control" placeholder="Your Name" id="Name" />
            </div>
        </div>
        <div class="col-md-12">
            <div class="form-group">
                <input type="email" placeholder="Enter Valid Email Address" class="form-control" id="Email" />
            </div>
        </div>
        <input type="submit" value="Submit" id="btnSubmit" class="reviewBtn">POST REVIEW</button>
    </div>
    </div>
  </div>
  </form>


$('#myform').on('submit', function (e) {

    e.preventDefault();

   var ok = $(this).valid();

  if (ok) {

      var comment = $("#CommentText").val();
      var name = $("#Name").val();
      var email = $("#Email").val();

      $.ajax({
         type: 'post',
         url: '/Account/feedbackAndReview',
         data: {'CommentText' : comment , 'Name' : name , 'Email' : email },
         success : function (data)
         {
         }
     })
   }
}