Modelstate验证不需要的字段

时间:2013-02-22 16:01:35

标签: c# asp.net-mvc hidden-field

我有这个问题,我需要验证带有ID的模型,但我不想显示ID,我试图把它放在一个隐藏的字段中。

这是我的模特:

namespace MyApp.Models
{
    public class ObjInfo
    {
        /// <summary>
        /// Variable declaration.
        /// </summary>

        public int m_Id { get; set; }

        [Required(ErrorMessage = "Obj Name is required.")]
        [MaxLength(75)]
        [Display(Name = "Obj Name")]
        public string m_Name { get; set; }

        [Display(Name = "Obj Symbol")]
        public string m_SymbolText { get; set; }

(...)         }     }

我只把问题字段和另一个字段放在一起。我的模型中还有其他不相关的数据。

现在这是此模型的“创建”视图:

@model MyApp.Models.ObjInfo

@{
    ViewBag.Title = "Create";
}

<h2>Create New Obj</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>OBJ</legend>

        @Html.HiddenFor(model => model.m_Id)

        <div class="editor-label">
            @Html.LabelFor(model => model.m_Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.m_Name)
            @Html.ValidationMessageFor(model => model.m_Name)
        </div>

        (...)

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to obj list", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

因此,当我确认创建此obj时,由于提供的ID,ModelState始终返回false,但我不能向用户显示此ID,我需要它来解决管理问题。

简单地说,我认为隐藏字段中没有数据。但它并不相关,因为我的BD无论如何都会给对象一个正确的ID。我该如何解决这个问题?

非常感谢。

2 个答案:

答案 0 :(得分:0)

在操作中检索模型时,请使用“绑定”排除m_Id

public ActionResult Example([Bind(Exclude = "m_Id")] ObjInfo objInfo)
{ 
    ...
}

答案 1 :(得分:0)

试试这个 public int? m_Id {得到;组; }