标签: modelstate

如何从ASP.Net MVC modelState获取所有错误?

我想在不知道键值的情况下从modelState中获取所有错误消息.循环以获取ModelState包含的所有错误消息.

我怎样才能做到这一点?

asp.net-mvc modelstate

430
推荐指数
12
解决办法
28万
查看次数

ModelState.AddModelError - 如何添加不属于属性的错误?

我在检查我的数据库Create(FooViewModel fvm){...},看是否fvm.prop1fvm.prop2在该组合已经存在; 如果是这样,我想向modelstate添加一个错误,然后返回整个视图.我试过了:

public ActionResult Create(FooViewModel fvm){
    if (ThatComboAlreadyExists(fvm)) {
      ModelState.AddModelError("Model", "There is already one like that");
      return View(fvm);
    }
}
Run Code Online (Sandbox Code Playgroud)

...但我没有显示错误Html.ValidationSummary,这是我认为它们会出现的地方.我怀疑"模型"不是正确的关键,但我一直无法找到任何谷歌.

modelstate asp.net-mvc-2-validation asp.net-mvc-2

180
推荐指数
2
解决办法
14万
查看次数

ASP.NET MVC如何将ModelState错误转换为json

如何获取所有ModelState错误消息的列表?我找到了这个代码来获取所有密钥:( 返回带有ModelState错误的密钥列表)

var errorKeys = (from item in ModelState
        where item.Value.Errors.Any() 
        select item.Key).ToList();
Run Code Online (Sandbox Code Playgroud)

但是,如何将错误消息作为IList或IQueryable获取?

我可以去:

foreach (var key in errorKeys)
{
    string msg = ModelState[error].Errors[0].ErrorMessage;
    errorList.Add(msg);
}
Run Code Online (Sandbox Code Playgroud)

但那可以手动完成 - 当然有一种方法可以使用LINQ吗?.ErrorMessage属性到目前为止,我不知道如何编写LINQ ...

c# linq asp.net-mvc modelstate

123
推荐指数
7
解决办法
7万
查看次数

Asp.net MVC ModelState.Clear

任何人都可以给我一个关于ModelState在Asp.net MVC中的角色的简洁定义(或者链接到一个).特别是我需要知道在什么情况下打电话是必要的或可取的ModelState.Clear().

有点开放了 ......对不起,我想如果告诉你我在做什么可能会有所帮助:

我在一个名为"Page"的控制器上有一个Edit of Action.当我第一次看到表单更改页面的详细信息时,所有内容都很好地加载(绑定到"MyCmsPage"对象).然后,我单击一个按钮,为MyCmsPage对象的某个字段(MyCmsPage.SeoTitle)生成一个值.它生成正常并更新对象,然后我返回动作结果与新修改的页面对象,并期望相关的文本框(使用渲染<%= Html.TextBox("seoTitle", page.SeoTitle)%>)更新...但是它显示了加载的旧模型的值.

我通过使用来解决它,ModelState.Clear()但我需要知道它为什么/如何工作所以我不只是盲目地做.

的PageController:

[AcceptVerbs("POST")]
public ActionResult Edit(MyCmsPage page, string submitButton)
{
    // add the seoTitle to the current page object
    page.GenerateSeoTitle();

    // why must I do this?
    ModelState.Clear();

    // return the modified page object
     return View(page);
 }
Run Code Online (Sandbox Code Playgroud)

ASPX:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyCmsPage>" %>
....
        <div class="c">
            <label for="seoTitle">
                Seo Title</label>
            <%= Html.TextBox("seoTitle", page.SeoTitle)%>
            <input type="submit" value="Generate Seo Title" name="submitButton" />
        </div>
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc post-redirect-get modelstate

114
推荐指数
6
解决办法
10万
查看次数

112
推荐指数
1
解决办法
3万
查看次数

ModelState.IsValid == false,为什么?

我在哪里可以找到使ModelState无效的错误列表?我没有在ModelState对象上看到任何错误属性.

c# asp.net-mvc modelstate

109
推荐指数
6
解决办法
13万
查看次数

ASP.NET MVC - 如何在RedirectToAction中保留ModelState错误?

我有以下两种操作方法(简化问题):

[HttpGet]
public ActionResult Create(string uniqueUri)
{
   // get some stuff based on uniqueuri, set in ViewData.  
   return View();
}

[HttpPost]
public ActionResult Create(Review review)
{
   // validate review
   if (validatedOk)
   {
      return RedirectToAction("Details", new { postId = review.PostId});
   }  
   else
   {
      ModelState.AddModelError("ReviewErrors", "some error occured");
      return RedirectToAction("Create", new { uniqueUri = Request.RequestContext.RouteData.Values["uniqueUri"]});
   }   
}
Run Code Online (Sandbox Code Playgroud)

因此,如果验证通过,我将重定向到另一页(确认).

如果发生错误,我需要显示包含错误的同一页面.

如果我这样做return View(),则会显示错误,但如果我这样做return RedirectToAction(如上所述),则会丢失模型错误.

我对这个问题并不感到惊讶,只是想知道你们是怎么处理这个问题的?

我当然可以返回相同的View而不是重定向,但我在"Create"方法中有逻辑,它填充了视图数据,我必须复制它.

有什么建议?

error-handling asp.net-mvc redirecttoaction modelstate http-redirect

85
推荐指数
5
解决办法
5万
查看次数

MVC3删除ModelState错误

我有一个情况,我正在上传用户从他的本地文件系统中选择的图像.在我看来,我的表单基本上有两个提交按钮.一个用于正常提交表单,并执行所有验证.第二个仅用于上传图像,在这种情况下我还不想验证.

我设法关闭客户端验证,给我的"上传图片"提交按钮一个类"取消样式名称",所以

<input type="submit" name="UploadImageButton" value="Upload Image" class="style-name cancel" /> 
Run Code Online (Sandbox Code Playgroud)

现在,当我回发时,我的模型有一个属性UploadImageButton,当单击此按钮时,它会填充此属性(输入的名称与属性匹配).这样,我知道表单是由我的真实提交按钮还是由UploadImageButton提交的.

我的问题是这样的......如何关闭ServerSide验证?我不希望在用户单击此按钮时显示验证摘要信息.我知道您可以使用此方法添加自定义模型错误

ModelState.AddModelError("{key}", "{error msg}");
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来删除模型错误.这可能吗?

编辑:

这是我想出的:

foreach (var key in ModelState.Keys.ToList().Where(key => ModelState.ContainsKey(key))) {
     //ModelState.Remove(key); //This was my solution before
     ModelState[key].Errors.Clear(); //This is my new solution. Thanks bbak
}
Run Code Online (Sandbox Code Playgroud)

validation modelstate asp.net-mvc-3

79
推荐指数
5
解决办法
7万
查看次数

如何从ActionFilter访问ModelState?

我正在构建一个ActionFilter重用一些代码用于简单的垃圾邮件块 - 基本上我所做的是我有一个Html Helper方法来呈现输入文本框和一个隐藏的输入,并在ActionFilter中我检查这两个值是否相同.如果没有,我想利用我的验证逻辑的其余部分并添加一个ModelStateErrorModelState,但我怎么做呢?如何添加一个ModelStateError来自whithin ActionFilter

更新:这是我正在尝试的代码.当我测试具有此属性的控制器操作时,即使我没有传递任何所需的表单值,ModelState.IsValid仍然会返回true:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var r = filterContext.HttpContext.Request;
    if (r.Form["sixtimesnine"] != r.Form["fourtytwo"] || string.IsNullOrEmpty(r.Form["sixtimesnine"]) || string.IsNullOrEmpty(r.Form["fourtytwo"]))
    {
        filterContext.Controller.ViewData.ModelState.AddModelError("Spam", this.ErrorMessage);
    }
    base.OnActionExecuting(filterContext);
}
Run Code Online (Sandbox Code Playgroud)

这是ActionMethod:

[ValidateAntiSpam(ErrorMessage = "Spambotar får inte.")]
public ActionResult Write(GuestbookPost postToCreate)
{
    if (ModelState.IsValid)
    {
        _posts.Add(postToCreate);
        return RedirectToAction("Index");
    }
    return View();
}
Run Code Online (Sandbox Code Playgroud)

我只是注意到,如果我在OnActionExecuting方法中设置了一个断点并点击"Debug tests",那么断点就永远不会被击中.为什么?

asp.net-mvc modelstate action-filter

42
推荐指数
1
解决办法
1万
查看次数

ASP.NET MVC Controller post方法单元测试:ModelState.IsValid始终为true

我已经为ASP.NET MVC Web应用程序编写了我的第一个单元测试.一切正常,它给了我有价值的信息,但我不能在视图模型中测试错误.ModelState.IsValid始终为true,即使未填充某些值(空字符串或null).

我已经读过,当发布的数据映射到模型时,模型验证会发生,您需要编写一些代码来自行进行模型验证:

我已经尝试了链接网页中提供的三个示例,但它似乎对我不起作用.

一些代码:

我的观点模型

...
[Required(ErrorMessageResourceName = "ErrorFirstName", ErrorMessageResourceType = typeof(Mui))]
[MaxLength(50)]
[Display(Name = "Firstname", ResourceType = typeof(Mui))]
public string FirstName { get; set; }
...
Run Code Online (Sandbox Code Playgroud)

控制器

...
 [HttpPost]
    public ActionResult Index(POSViewModel model)
    {
        Contract contract = contractService.GetContract(model.ContractGuid.Value);

        if (!contract.IsDirectDebit.ToSafe())
        {
            ModelState.Remove("BankName");
            ModelState.Remove("BankAddress");
            ModelState.Remove("BankZip");
            ModelState.Remove("BankCity");
            ModelState.Remove("AccountNr");
        }

        if (ModelState.IsValid)
        {
            ...

            contractValidationService.Create(contractValidation);
            unitOfWork.SaveChanges();

            return RedirectToAction("index","thanks");
        }
        else
        {
            return Index(model.ContractGuid.ToString());
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的单元测试

  posViewModel.FirstName = null;
  posViewModel.LastName = "";
 ...
 var modelBinder = new ModelBindingContext() …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc unit-testing modelstate

34
推荐指数
2
解决办法
3万
查看次数