Asp.net 如何忽略对模型属性的验证?
一,。e如何在忽略if(modelstate.Isvalid){}上的其他(该模型的属性)时对模型的单个属性应用验证?Asp.net 如何忽略对模型属性的验证?,asp.net,asp.net-mvc-3,Asp.net,Asp.net Mvc 3,一,。e如何在忽略if(modelstate.Isvalid){}上的其他(该模型的属性)时对模型的单个属性应用验证?模型 using System.ComponentModel.DataAnnotations; namespace abc.Model { using System; using System.Collections.Generic; public partial class check_master { public int MCheck_id { get; set;
模型
using System.ComponentModel.DataAnnotations;
namespace abc.Model
{
using System;
using System.Collections.Generic;
public partial class check_master
{
public int MCheck_id { get; set; }
[Required]
public string check_name { get; set; }
public string field { get; set; }
public Nullable<byte> max_length { get; set; }
public int check_id { get; set; }
}
}
使用System.ComponentModel.DataAnnotations;
名称空间abc.Model
{
使用制度;
使用System.Collections.Generic;
公共部分类检查主机
{
public int MCheck_id{get;set;}
[必需]
公共字符串检查\u name{get;set;}
公共字符串字段{get;set;}
公共可空最大长度{get;set;}
公共整数检查\u id{get;set;}
}
}
查看
@使用(Html.BeginForm(“addCheck”和“”)
{
@DropDownList(“check_master”、“--select checks--”)
@Html.TextBox(“checkName”,“”)
@Html.ValidationMessage(“检查名称”)
}如果应该忽略其他模型属性,为什么要使用验证属性装饰它们?这没有任何意义,也不可能
使用视图模型。为不同的情况定义不同的视图模型,并基于视图模型和情况仅装饰需要验证的属性。或者更好的是,不要装饰任何东西,用它来以一种流畅而有力的方式表达您的验证需求。使用
[Bind(Exclude=“Property\u Name”)]
这是一个有点老的问题,但我不相信它已经得到了正确的回答。操纵绑定根本不会改变操纵过程,因为验证是在绑定之前/同时进行的。
与上面的示例一样,将属性标记为excluded仍将生成错误的modelstate.isvalid属性
关于验证问题,最推荐的方法似乎是创建专用的ViewModels,因为它可以同时处理一些您可能知道或不知道的其他问题
ViewModels的替代方法是操纵modelstate对象,以拾取并选择(或排除)要验证的属性,如下所示:
(这里有一些额外的代码用于删除魔术字符串)
以上内容将排除Id属性的验证。如果愿意,您可以将代码转换为以独占方式验证Id属性。我只修饰了单个属性,但我的modelstate仍然不是valid@Kannas,啊,这是不正常的,尤其是在调用控制器操作时传递有效值时。您想与我们分享任何代码吗?请详细说明:模型、控制器、视图。提供一份。你能同时提供参考资料吗?
@using (Html.BeginForm("addCheck", ""))
{
<input type="hidden" id="from" name="from" value="@ViewBag.from" readonly="readonly" />
<fieldset>
<tr>
<td>
@Html.DropDownList("check_master", "--select checks--")
</td>
<td>
@Html.TextBox("checkName", "")
@Html.ValidationMessage("check_name")
</td>
</tr>
</table>
</fieldset>
<p>
<input type="submit" value="Add" />
</p>
var modelPropAsString = nameof(yourmodel)+"."+nameof(yourmodel.Id);
if (ModelState[modelPropAsString ].Errors.SingleOrDefault() != null)
{
ModelState[modelPropAsString ].Errors.Clear();
yourmodel.Id = 0;
}