我。 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; }
[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; }
}
}
查看
@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>
}
答案 0 :(得分:6)
使用[Bind(Exclude = "Property_Name")]
答案 1 :(得分:1)
如果应该忽略它们,为什么要使用验证属性修饰其他模型属性?这没有任何意义,这是不可能的。
使用视图模型。为不同的情况定义不同的视图模型,并根据视图模型和情境仅装饰您需要验证的属性。或者甚至更好,不要装饰任何东西,使用FluentValidation.NET以流畅和强大的方式表达您的验证要求。
答案 2 :(得分:0)
这是一个有点老问题,但我不相信它已得到妥善回答。操纵绑定根本不会改变操作过程,因为验证发生在/同时绑定之前。 如上例所示,将属性标记为已排除仍将生成false modelstate.isvalid属性。
有关验证问题的最佳推荐方法似乎是创建专用的ViewModel,因为它会处理您可能或可能不知道的同一些其他问题。
ViewModels的替代方法是操纵modelstate对象以选择(或排除)要验证的属性,如下所示:
(这里有一些额外的代码可以删除魔法字符串)
var modelPropAsString = nameof(yourmodel)+"."+nameof(yourmodel.Id);
if (ModelState[modelPropAsString ].Errors.SingleOrDefault() != null)
{
ModelState[modelPropAsString ].Errors.Clear();
yourmodel.Id = 0;
}
以上内容将从验证中排除Id属性。如果您愿意,可以将代码转换为专门验证Id属性。