Validation MVC2客户端验证,带有视图中的注释和渲染

Validation MVC2客户端验证,带有视图中的注释和渲染,validation,asp.net-mvc-2,data-annotations,renderaction,Validation,Asp.net Mvc 2,Data Annotations,Renderaction,我在使用Html.RenderAction呈现dropdownlist的视图上遇到客户端验证问题 我有两个控制器。SpecieController和CatchController,我已经为我的视图创建了ViewModels。 我想让它尽可能干燥,在不久的将来,我很可能需要一个所有物种的下拉列表 当我创建一个捕获时,我需要设置一个与一个物种的关系,我使用从物种下拉列表中获得的id来完成 ViewModels.Catch.Create [Required] public int Length { g

我在使用Html.RenderAction呈现dropdownlist的视图上遇到客户端验证问题

我有两个控制器。SpecieController和CatchController,我已经为我的视图创建了ViewModels。 我想让它尽可能干燥,在不久的将来,我很可能需要一个所有物种的下拉列表

当我创建一个捕获时,我需要设置一个与一个物种的关系,我使用从物种下拉列表中获得的id来完成

ViewModels.Catch.Create

[Required]
public int Length { get; set; }

[Required]
public int Weight { get; set; }

[Required]
[Range(1, int.MaxValue)]
public int SpecieId { get; set; }
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<BC.ProjectName.Web.ViewModels.CatchModels.Create>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <% Html.EnableClientValidation(); %>
    <% using (Html.BeginForm()) {%>
        <%: Html.ValidationSummary(true) %>

        <fieldset>
            <div class="row">
                <div class="editor-label">
                    <%: Html.LabelFor(model => model.Weight) %>
                </div>
                <div class="editor-field">
                    <%: Html.TextBoxFor(model => model.Weight) %>
                    <%: Html.ValidationMessageFor(model => model.Weight) %>
                </div>
            </div>

            <div class="row">
                <div class="editor-label">
                    <%: Html.LabelFor(model => model.Length) %>
                </div>
                <div class="editor-field">
                    <%: Html.TextBoxFor(model => model.Length) %>
                    <%: Html.ValidationMessageFor(model => model.Length) %>
                </div>
            </div>

            <div class="row">
                <div class="editor-label">
                    <%: Html.LabelFor(model => model.SpecieId) %>
                </div>
                <div class="editor-field">
                    <%-- Before DRY refactoring, works like I want but not DRY 
                      <%: Html.DropDownListFor(model => model.SpecieId, Model.Species) %>
                    --%>
                    <% Html.RenderAction("DropDownList", "Specie"); %>
                    <%: Html.ValidationMessageFor(model => model.SpecieId) %>
                </div>
            </div>

            <div class="clear"></div>

            <input type="submit" value="Save" />

        </fieldset>

    <% } %>

</asp:Content>
[HttpPost]
public ActionResult Create(ViewModels.CatchModels.Create myCatch)
{
    if (ModelState.IsValid)
    {
        // Can we make this StronglyTyped?
        int specieId = int.Parse(Request["Species"]);

        // Save to db
        Catch newCatch = new Catch();
        newCatch.Length = myCatch.Length;
        newCatch.Weight = myCatch.Weight;
        newCatch.Specie = SpecieService.GetById(specieId);
        newCatch.User = UserService.GetUserByUsername(User.Identity.Name);

        CatchService.Save(newCatch);

        // After save redirect
        return Redirect("/");
    }

    // Invalid
    return View();
}
ViewModels.Specie.DropDownList

public DropDownList(IEnumerable<SelectListItem> species) { this.Species = species; }
public IEnumerable<SelectListItem> Species { get; private set; }
这种情况下工作,但没有我想要的顺利

  • 客户端验证对SpecieId不起作用(在我重构之后),我明白了原因,但不知道如何对其进行ix验证
  • 我是否可以将DropDownList SelectedValue“粘合”到myCatch中,这样我就不需要从请求[“物种”]中获取值

  • 提前感谢您在这方面花时间。

    我不确定这是否有帮助,但我使用的是xVal而不是MVC2的客户端验证,在您描述的场景下,它可以正常工作。我有很多客户端验证的DropDownlist,我主要使用RenderAction渲染它们

    请把视图和创建操作的全部代码分页好吗?客户端验证通常与以下html帮助程序一起应用:
    html.EnableClientSideValidation()
    粘贴的整个代码。ClientValidation适用于长度和重量等其他字段。在我重构到RenderAction之前,它也适用于下拉列表。然后将物种集合放在捕获物内。在长度、重量和物种道具旁边创建对象。