Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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# 将字段保留为空时,验证不起作用_C#_Asp.net Mvc_Validation_Razor - Fatal编程技术网

C# 将字段保留为空时,验证不起作用

C# 将字段保留为空时,验证不起作用,c#,asp.net-mvc,validation,razor,C#,Asp.net Mvc,Validation,Razor,我试图在视图中为我的字段创建验证,因此如果用户将其留空,则每个字段下都会显示验证消息 我的问题是,每次我通过将其中一个字段留空来测试验证时,我都会得到context.SaveChanges()error,并得到以下消息 一个或多个实体的验证失败。有关更多详细信息,请参阅“EntityValidationErrors”属性,问题在哪里 这是我的模型 public class NewsViewModel { public int Id { get; set; } [Required(

我试图在视图中为我的字段创建验证,因此如果用户将其留空,则每个字段下都会显示验证消息

我的问题是,每次我通过将其中一个字段留空来测试验证时,我都会得到
context.SaveChanges()
error,并得到以下消息

一个或多个实体的验证失败。有关更多详细信息,请参阅“EntityValidationErrors”属性,问题在哪里

这是我的模型

public class NewsViewModel
{
    public int Id { get; set; }
    [Required(ErrorMessage = "Title is required")]
    public string Title { get; set; }
    [Required(ErrorMessage = "Text is required")]
    public string Text { get; set; }

}
这是我的控制器

public ActionResult AlterNews(News model )
{
    var context = new BackOfficeEntities();
    if (ModelState.IsValid)
    {

            var update = context.News.SingleOrDefault(x => x.Id == model.Id);

            update.Title = model.Title;
            update.Text = model.Text;
            context.SaveChanges();
            return RedirectToAction("Index", "News");       
    }
    return View(model);
}
最后,我想谈谈这个观点

@using (Html.BeginForm("AlterNews", "News"))
{
    @Html.AntiForgeryToken()

    @Html.ValidationSummary("", new { @class = "text-danger" })

    <fieldset>
        <div class="col-md-4">
            <div class="form-group">
                @Html.HiddenFor(Model => Model.Id, new { @class = "control-label" })

                @Html.LabelFor(Model => Model.Title)
                @Html.TextBoxFor(Model => Model.Title, new { @class = "form-control" })
                @Html.ValidationMessageFor(Model => Model.Title)
            </div>

            <div class="form-group">


                @Html.LabelFor(Model => Model.Text, new { @class = "control-label" })
                @Html.TextAreaFor(Model => Model.Text, new { @class = "form-control", rows = "10" })
                @Html.ValidationMessageFor(Model => Model.Text)
            </div>
        </div>

    </fieldset>
    <div class="col-md-4">

        <button type="submit" class="btn btn-default" name="buttonSubmit" value="Edit News">Edit News</button>
    </div>
}
@section scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
使用(Html.BeginForm(“AlterNews”、“News”)) { @Html.AntiForgeryToken() @Html.ValidationSummary(“,new{@class=“text danger”}) @Html.HiddenFor(Model=>Model.Id,新的{@class=“control label”}) @LabelFor(Model=>Model.Title) @Html.TextBoxFor(Model=>Model.Title,新的{@class=“form control”}) @Html.ValidationMessageFor(Model=>Model.Title) @LabelFor(Model=>Model.Text,新的{@class=“control label”}) @Html.TextAreaFor(Model=>Model.Text,新的{@class=“form control”,rows=“10”}) @Html.ValidationMessageFor(Model=>Model.Text) 编辑新闻 } @节脚本{ @Scripts.Render(“~/bundles/jqueryval”) }
您可以尝试检查基础验证错误,这将提示导致错误的原因

try{

      var update = context.News.SingleOrDefault(x => x.Id == model.Id);

      update.Title = model.Title;
      update.Text = model.Text;
      context.SaveChanges();

}
catch(DbEntityValidationException ex)
{
        StringBuilder result = new StringBuilder();
        var entityErrors = ex.EntityValidationErrors;

        foreach (var entity in entityErrors)
        {
            foreach (var error in entity.ValidationErrors)
            {
                result.Append(error.PropertyName + " - " + error.ErrorMessage + "\n");
            }
        }        
        throw;
}

你有很多问题(与问题无关)。您似乎没有使用来防止跨站点伪造。属性的
标签
标记
不指向其他HtmlElement Id(只是非标准)。您不需要这样做。您会收到哪些验证错误消息?请告诉我们错误说明;catch(DbEntityValidationException e){foreach(e.EntityValidationErrors中的变量eve)该错误是来自数据库的验证,因为我将文本字段留空以确保验证将在页面上工作,但它没有,这就是我收到错误的原因。该错误在此处不重要,因为它没有说明我的验证不工作的原因…是否使用了此NewsViewModel?您的控制器正在接受公共活动nResult AlterNews(新闻模型),它们是两个不同的对象显示此答案是否解决了问题我的问题是每次我通过将其中一个字段留空来测试验证时,我都会得到context.SaveChanges()错误?这看起来是找到问题的一个步骤,但根本解决不了问题。