发布ASP.NET MVC表单之前的验证

时间:2011-04-26 09:35:35

标签: jquery asp.net-mvc

我有这个:

@using (Html.BeginForm("Action", "Controller", FormMethod.Post))
{
@Html.TextBoxFor(m => m.City, new { id = "tbCity", maxlength = 50 })
<input type="submit" value="Save" class="btSave" />
}

我想做一个sublit做一些验证(检查“tbCity”是否为长度!= 0),我创建了一个带有所有验证的函数,我怎么能在这里调用?如果验证不正确,取消?

谢谢,

UPDATE1

@Adam Pope: 想象一下,我有一个数据模型名称为“Person”(名字,姓氏,......),一个带有public Person Person{ get; set; }的模型类,其中使用[必需]属性?

2 个答案:

答案 0 :(得分:2)

如果您使用的是ASP.NET MVC 2或3,那么您应该检查DataAnnotations

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx
http://www.asp.net/mvc/tutorials/creating-a-mvc-3-application-with-razor-and-unobtrusive-javascript

他们允许您在域模型上指定验证约束,并让UI自动为您生成验证代码。

在这种情况下,您可能有一个模型

public class MyModel
{
    [Required]
    public string City { get; set; }
}

然后您的视图使用该模型

@model MyModel

@Html.TextBoxFor(x => x.City)
@Html.ValidationMessageFor(x => x.City)

更新

对于下拉列表,我倾向于执行以下操作,而不是100%确定它是最佳的,但它可以正常工作

public class MyModel
{ 
    [Range(1,int.MaxValue,ErrorMessage="Please select a value")]
    public int OtherModelID { get; set; }

    public IList<OtherModel> OtherModels {get; set; }
}

然后在视图中

@model MyModel

<select id="OtherModelID" name="OtherModelID">
    <option value="0">Please Select</option>
    @foreach(var m in Model.OtherModel)
    {
        <option value="m.ID">m.Name</option>
    }
</select>

如果你在编辑屏幕上,你可以在那里设置一个条件来选择当前值。

答案 1 :(得分:1)

如果您使用的是jQuery,那么您应该使用像jQuery validation这样的内置框架。

对于您的场景,它可能听起来有点过度杀戮,但随着项目的增长,验证规则很容易爆炸。因此,使用验证框架非常棒。 jQuery验证插件被广泛使用并且非常有用。

修改

代码:

$("form").live("submit", function () { 

if ($("#tbCity").val().length == 0) { 
alert("tbCity length should be greater than 0"); return false; 
}

});