标签: modelstate

验证:如何使用Ninject注入模型状态包装器?

我正在查看本教程http://asp-umb.neudesic.com/mvc/tutorials/validating-with-a-service-layer--cs,了解如何围绕包装器包装我的验证数据.

我想使用依赖注入.我正在使用ninject 2.0

namespace MvcApplication1.Models
{
    public interface IValidationDictionary
    {
        void AddError(string key, string errorMessage);
        bool IsValid { get; }
    }
}
Run Code Online (Sandbox Code Playgroud)

//包装

using System.Web.Mvc;

namespace MvcApplication1.Models
{
    public class ModelStateWrapper : IValidationDictionary
    {

        private ModelStateDictionary _modelState;

        public ModelStateWrapper(ModelStateDictionary modelState)
        {
            _modelState = modelState;
        }

        #region IValidationDictionary Members

        public void AddError(string key, string errorMessage)
        {
            _modelState.AddModelError(key, errorMessage);
        }

        public bool IsValid
        {
            get { return _modelState.IsValid; }
        }

        #endregion
    }
}
Run Code Online (Sandbox Code Playgroud)

//控制器

private IProductService _service;

public ProductController() 
{ …
Run Code Online (Sandbox Code Playgroud)

c# ninject ioc-container modelstate asp.net-mvc-2

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

ModelState.IsValid始终返回false

[HttpPost]
public ActionResult Create(Users user)
{
    if (ModelState.IsValid)
    {
        db.Users.Add(user);
        db.SaveChanges();
        return RedirectToAction("Index");  
    }

    return View(user);
}
Run Code Online (Sandbox Code Playgroud)

ModelState.IsValid总是假的.
所以它只是返回视图并且没有添加新记录..

编辑

用户:

public class User
{
    public int UserID { get; set; } 
    public string Name { get; set; } 
    [Display(Name = "Confirm Password")] [DataType(DataType.Password)] 
    public string ConfirmPassword { get; set; } 
    public string Designation { get; set; } 
    [Display(Name = "Date of Join")] [DataType(DataType.Date)] public DateTime DOJ { get; set; } 
    public string Email { get; set; } 
    [Display(Name …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc modelstate asp.net-mvc-3

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

测试ModelState在asp.net mvc中始终有效

在测试我的控制器的动作时,ModelState始终有效.

public class Product
{
    public int Id { get; set; }

    [Required]
    [StringLength(10)]
    public string Name { get; set; }

    [Required]
    public string Description { get; set; }

    [Required]
    public decimal Price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

而我的控制器.

public class ProductController : Controller
{
      [HttpPost]
      public ActionResult Create(Product product)
      {
            if (ModelState.IsValid)
            {
                   // Do some creating logic...
                   return RedirectToAction("Display");
            }

             return View(product);              
      }
 }
Run Code Online (Sandbox Code Playgroud)

并测试:

[Test]
public TestInvalidProduct()
{
     var product = new Product();
     var controller = new …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc unit-testing modelstate asp.net-mvc-3

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

如何获取列表中项的ModelState键

问题

我有一个用户可以编辑的字段列表.提交模型时,我想检查这些项是否有效.我不能使用数据表示法,因为每个字段都有不同的验证过程,直到运行时才会知道.如果验证失败,我使用ModelState.AddModelError(string key, string error)其中键是要添加错误消息的html元素的名称.由于有一个字段列表,Razor为html项生成的名称就像Fields[0].DisplayName.我的问题是有一种方法或方法从视图模型中获取生成的html名称的密钥?

试图解决方案

toString()没有运气就尝试了密钥的方法.我也看了整HtmlHelper课,但没有看到任何有用的方法.

代码片段

查看模型

public class CreateFieldsModel
{
    public TemplateCreateFieldsModel()
    {
        FreeFields = new List<FieldModel>();
    }

    [HiddenInput(DisplayValue=false)]
    public int ID { get; set; }

    public IList<TemplateFieldModel> FreeFields { get; set; }


    public class TemplateFieldModel
    {
        [Display(Name="Dispay Name")]
        public string DisplayName { get; set; }

        [Required]
        [Display(Name="Field")]
        public int FieldTypeID { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

调节器

public ActionResult CreateFields(CreateFieldsModel model)
{
    if (!ModelState.IsValid)
    {
        //Where do I …
Run Code Online (Sandbox Code Playgroud)

c# model-view-controller asp.net-mvc modelstate

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

成功消息而不是模型状态错误消息

对于错误消息,验证错误等

ModelState.AddErrorMessage("Fool!");
Run Code Online (Sandbox Code Playgroud)

但是,你在哪里提出成功回应,例如"你成功地向你的前任转移了很多钱".+"你的余额现在为零".我仍然希望在控制器级别设置它,最好是以键值方式设置它,就像错误消息一样,但不会使模型状态失效.

这通常是怎么做的?ViewData的?

c# asp.net asp.net-mvc modelstate

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

使用ModelState.Remove处理ModelState是否正确?

我正在开发一个大型的MVC3 Web应用程序,并对该ModelState.IsValid方法感到烦恼.

几乎所有的控制器都使用ModelState,以验证发布的数据.视图都基于包含不同类的ViewModel,这些类显然包含可以标记为的属性[Required].

我遇到的问题是有时不需要所需的属性,我必须使用该ModelState.Remove方法才能ModelState.IsValid成为现实.

我的问题是使用ModelState.Remove,这是正确的做事方式还是更有效的方法.

asp.net-mvc modelstate asp.net-mvc-3

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

如何将modelstate错误添加到列表中

我有一个使用这样的模型项列表的视图:

List<It4You.AlertBrick.Library.Domain.Order.AbOrderLineItemPicked>
Run Code Online (Sandbox Code Playgroud)

当我获得这个服务器列表时,我检查这是否是一种类型的项目,它必须有一个有效的序列号.如果是另一种类型,我会检查用户是否在"已选中"复选框中添加了复选标记.如果这两个都失败了,我想在此行中添加一个模型状态错误.这样做的最佳方式是什么?

c# modelstate asp.net-mvc-3

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

刷新ModelState以删除错误

刷新ModelState

嗨,我对ASP.NET MVC控制器中的ModelState有疑问.

当用户从视图中选择某个选项时,将根据输入的其他日期设置"认证"的开始日期和结束日期.

这个问题是认证日期返回为null,我们的CertificationMetaData类将字段指定为[必需],因此一旦操作加载,ModelState就无效.

手动删除ModelSate错误允许这个工作,但我想知道是否有更好的方法来做到这一点?有没有办法刷新ModelState?我应该不要求这些字段吗?或者我应该使用javascript从视图中添加日期值?

public ActionResult Create(FormCollection fc, Certification certification, Absence absence)
{
    if (certification.CertificationTypeID == 1)
    {
        certification.CertificationStartDate = absence.StartDate;
        certification.CertificationEndDate = absence.StartDate.AddDays(7);
        this.ModelState.Remove("CertificationStartDate");
        this.ModelState.Remove("CertificationEndDate");
    }

    if (this.ModelState.IsValid)
    {
        // save
        return RedirectToAction("Index");
    }
     return View();
}
Run Code Online (Sandbox Code Playgroud)

另外,您可以看到我已经对证书类型的ID值进行了硬编码.将值与查找表值进行比较的最佳方法是什么?enum是最好的方式吗?

谢谢

c# asp.net-mvc modelstate

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

如何在Json返回时读取模型状态错误?

如何显示JSON返回的ModelState错误?

我想做这样的事情:

 if (!ValidateLogOn(Name, currentPassword))
    {
        ModelState.AddModelError("_FORM", "Username or password is incorrect.");

        //Return a json object to the javascript
        return Json(new { ModelState });
    }
Run Code Online (Sandbox Code Playgroud)

在视图中我的代码必须是什么才能读取ModelState错误并显示它们?

我在视图中读取JSON值的实际代码如下:

function createCategoryComplete(e) { 
    var obj = e.get_object(); 
    alert(obj.Values); 
} 
Run Code Online (Sandbox Code Playgroud)

error-handling asp.net-mvc modelstate

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

是否有一种强有力的方法来删除ASP.NET MVC中的ModelState错误

有没有办法在ASP.NET MVC回发期间删除ModelState错误,而无需手动编写每个错误.

假设我们有一个复选框Billing Same As Shipping,我们希望忽略用户ShippingAddress在检查时所写的内容 - 通常你可能会做的就是这个.

ModelState.Remove("Checkout.ShipppingAddress.FirstName");
ModelState.Remove("Checkout.ShipppingAddress.LastName");
ModelState.Remove("Checkout.ShipppingAddress.Address1");
ModelState.Remove("Checkout.ShipppingAddress.Address2");
...
ModelState.Remove("Checkout.ShipppingAddress.ZipCode");
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc modelstate

13
推荐指数
2
解决办法
7282
查看次数