C# 验证模型中的某个属性是否高于另一个属性
我有一个包含以下两个属性的模型:C# 验证模型中的某个属性是否高于另一个属性,c#,asp.net-mvc,html,C#,Asp.net Mvc,Html,我有一个包含以下两个属性的模型: public int m_ID public int m_NbrInStock public int m_QtyToShow 以下是我实际呈现的视图: <script src="/Scripts/jquery-1.7.1.min.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(
public int m_ID
public int m_NbrInStock
public int m_QtyToShow
以下是我实际呈现的视图:
<script src="/Scripts/jquery-1.7.1.min.js"
type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#selectAll").click(function ()
{
var chkValue = $(this).is(":checked");
$(".divChckBox").prop("checked", chkValue);
});
});
</script>
<p>
@using (Html.BeginForm("SendItems", "Inventory"))
{
<p>
Select / UnSelet All Items @Html.CheckBox("selectAll", true)
</p>
<table>
<tr>
<th>Obj Name</th>
<th>Number In Stock</th>
(...)
<th>Quantity</th>
</tr>
@for (int i = 0; i < Model.Count(); i++)
{
<tr>
<td>@Html.DisplayFor(x => x[i].m_Card.m_CardName)</td>
<td>@Html.DisplayFor(x => x[i].m_NbInStock)</td>
(...)
<td>
<input type="checkbox" name="itemSending" class="divChckBox" checked="true" value="@Model[i].m_ID"/>
</td>
<td>@Html.TextBoxFor(x => x[i].m_QtyToShow</td>
</tr>
}
</table>
<div class="float-right">
<input type="submit" value="Send"/>
</div>
}
</p>
$(文档).ready(函数(){
$(“#选择全部”)。单击(函数()
{
var chkValue=$(this).is(“:checked”);
$(.divChckBox”).prop(“选中”,chkValue);
});
});
@使用(Html.BeginForm(“SendItems”、“Inventory”))
{
选择/取消选择所有项目@Html.CheckBox(“selectAll”,true)
对象名称
库存数量
(...)
量
@对于(int i=0;ix[i].m\u Card.m\u CardName)
@DisplayFor(x=>x[i].m_NbInStock)
(...)
@Html.TextBoxFor(x=>x[i].m_QtyToShow
}
}
我这里有很多问题:
- 在控制器中手动验证数据
- 编写自定义验证器
public string QuantityValidationMsg {get; set}
然后在您的视图中显示消息
<td>@Html.TextBoxFor(x => x[i].m_QtyToShow
<span>@Html.DisplayFor(x => x[i].m_QuantityValidationMsg)</span></td>
对于第二种方法,您将创建一个实现ValidationAttribute
并定义如下:
public class ValidateQuantity : ValidateAttribute
{
private const string MESSAGE = "Error Message";
public ValidateQuantity (int qtyInput, int qtyConfirm)
: base( MESSAGE )
{
Input = qtyInput;
Confirm = qtyConfirm;
}
public int Input {get; private set;}
public int Confirm {get; private set;}
public override bool IsValid (object value)
{
var properties = TypeDescriptor.GetProperties(value);
var input = properties.Find(Input, false).GetValue(value);
var confirm = properties.Find(Confirm, false).GetValue(value);
if( input > confirm)
{
return false;
}
return true;
}
}
然后用新属性装饰模型属性
public int m_ID
public int m_NbrInStock
[ValidateQuantity]
public int m_QtyToShow
并在视图中添加验证消息
@Html.ValidationMessageFor(m => m.m_QtyToShow)
有两种方法可以做到这一点:
- 在控制器中手动验证数据
- 编写自定义验证器
public string QuantityValidationMsg {get; set}
然后在您的视图中显示消息
<td>@Html.TextBoxFor(x => x[i].m_QtyToShow
<span>@Html.DisplayFor(x => x[i].m_QuantityValidationMsg)</span></td>
对于第二种方法,您将创建一个实现ValidationAttribute
并定义如下:
public class ValidateQuantity : ValidateAttribute
{
private const string MESSAGE = "Error Message";
public ValidateQuantity (int qtyInput, int qtyConfirm)
: base( MESSAGE )
{
Input = qtyInput;
Confirm = qtyConfirm;
}
public int Input {get; private set;}
public int Confirm {get; private set;}
public override bool IsValid (object value)
{
var properties = TypeDescriptor.GetProperties(value);
var input = properties.Find(Input, false).GetValue(value);
var confirm = properties.Find(Confirm, false).GetValue(value);
if( input > confirm)
{
return false;
}
return true;
}
}
然后用新属性装饰模型属性
public int m_ID
public int m_NbrInStock
[ValidateQuantity]
public int m_QtyToShow
并在视图中添加验证消息
@Html.ValidationMessageFor(m => m.m_QtyToShow)
这种东西非常容易在Mkay中表达,Mkay是我为类似这样的特殊规则编写的自定义属性。它可以作为nuget包提供。安装后,您只需像这样注释模型属性:
[Mkay(">= m_NbrInStock")]
public int m_QtyToShow
如果您感兴趣,可以在我的博客上阅读更多关于Mkay如何工作的信息:这种东西非常容易用Mkay表达,这是我为类似这样的特殊规则编写的自定义属性。它可以作为nuget软件包提供。安装后,您只需对模型属性进行如下注释:
[Mkay(">= m_NbrInStock")]
public int m_QtyToShow
如果您感兴趣,您可以在我的博客上阅读更多关于Mkay如何工作的信息:非常感谢。我将评估我如何处理这个案例以及您提供给我的信息。谢谢!在我处理您的解决方案时,我终于明白,由于我最初没有将列表发送回httppost方法,因此不会进行任何修改保存。更改此设置对我帮助很大!再次感谢。:)非常感谢。我将评估我如何处理这个案子以及你给我的信息。谢谢在处理您的解决方案时,我终于明白,由于我最初没有将列表发送回httppost方法,因此所做的任何修改都不会被保存。改变这一点对我帮助很大!再次感谢你。:)我当然感兴趣,我会马上去读:)我当然感兴趣,我会马上去读:)