1

由于某种原因,我无法让 Url.Action 在 MVC 2 中触发客户端验证。我将其设置为这样

<div class="createpage"><a href="<%= Url.Action("Create","Account") %>"></a></div>

其中“Create”是操作,“Home”是控制器 (AccountController.cs)。如果我输入一个常规的提交按钮,验证就可以完美地工作。我有这样的验证设置

<% using (Html.BeginForm())
    {%>
    <%= Html.ValidationSummaryJQuery(
    "Please fix the following errors.",
    new Dictionary<string, object> { { "id", "valSumContainer" /* This is important. You can change the "id" attribute value, but don't remove it */ } }) %>
    <% ViewContext.FormContext.ValidationSummaryId = "valSumContainer"; { %>
//Form here
<%}%>

验证设置来自这里

我从中获取验证消息的 RegistrationModel.cs 看起来像这样

[PropertiesMustMatch("Password", "ConfirmPassword", ErrorMessage = "The password and confirmation password do not match.")]
public class RegistrationModel
{
    [Required(ErrorMessage = "Username is required")]
    [StringLength(25, ErrorMessage = "Username cannot be longer than 25 characters")]
    public string Username { get; set; }

    public string Password { get; set; }

    public string ConfirmPassword { get; set; }
    public AccountType AccountType { get; set; }

    [Required(ErrorMessage = "Studio Name is required.")]
    public string StudioName { get; set; }

    [Required(ErrorMessage = "Phone number is required")]
    [PhoneNumber(ErrorMessage="Not a valid phone number")]
    public string PhoneNumber { get; set; }

    [Required(ErrorMessage = "Email address is required")]
    [Email(ErrorMessage = "Not a valid email address")]
    public string EmailAddress { get; set; }

    [Required(ErrorMessage = "City is required")]
    public string City { get; set; }

    [UIHint("StatesDropDown")]
    [Required(ErrorMessage="State is required")]
    public string State { get; set; }

    [Required(ErrorMessage = "Zip code is required")]
    [StringLength(10, ErrorMessage = "Zip code canot be longer than 10 digits")]
    [ZipCode(ErrorMessage="Invalid zip code")]
    public string ZipCode { get; set; }

    [Required(ErrorMessage = "About text is required")]
    public string AboutText { get; set; }

    [Required(ErrorMessage = "Starting price is required")]
    [Currency(ErrorMessage="Not a valid currency value")]
    public double PriceStartsAt { get; set; }

    [UIHint("SkillsListView")]
    [Required(ErrorMessage="At least 1 skill must be selected")]
    public IList<Skill> Skills { get; set; }

    [UIHint("EquipmentListView")]
    [Required(ErrorMessage = "At least 1 equipment must be selected")]
    public IList<Skill> Equipment { get; set; }

    [UIHint("OccassionsListView")]
    [Required(ErrorMessage = "At least 1 occassion must be selected")]
    public IList<Skill> Occassions { get; set; }
}

就像我说的,使用普通的提交按钮它工作得很好(但是客户想要他们的 UI,所以按钮必须使用带有 CSS 的某些图像精灵。

编辑:把HomeController而不是AccountController,固定

4

2 回答 2

3

@PsychoCoder

在 Web 上,只有在提交表单时才会触发验证。

如果您想使用锚标记进行验证,则需要设置一些 javascript 代码。这个 javascript 可以是 jQuery 验证库,或者您可以使用锚点上的 onclick 事件调用提交。

<a href="javascript:void(0);" onclick="this.form[0].submit()">Create</a>

'this.form[0]' 可以替换为创建表单的 id。

于 2010-12-18T19:18:39.257 回答
0

我越来越近了。将我的BeginForm更改为看起来像

Html.BeginForm("Create", "Account", FormMethod.Post, new { @id = "RegisterForm" })

制作了一个可点击的 DIV 标签,可以显示我需要的图像精灵

<div onclick="javascript:RegisterForm.submit(); return false" class="createpage">
&nbsp;
</div>

所以我已经提交了表单,但根本没有执行验证,即使是空的(必需的)表单字段也是提交的。那么现在呢,这变得令人困惑,哈哈。提交和验证表单从来没有这么困难过(我又是 MVC 的新手)

于 2010-12-18T21:28:39.653 回答