相关疑难解决方法(0)

"需要Id字段"创建的验证消息; 我未设置为[必需]

当我尝试使用Asp.Net MVC 2中的创建样式操作创建实体时,会发生这种情况.

POCO具有以下特性:

public int Id {get;set;}

[Required]
public string Message {get; set}
Run Code Online (Sandbox Code Playgroud)

在创建实体时,会自动设置Id,因此在Create操作中不需要它.

ModelState表示"需要Id字段",但我没有将其设置为如此.这里有自动发生的事吗?

编辑 - 原因显示

Brad Wilson通过Paul Speranza在下面的一条评论中回答了这个问题的原因,他说(欢呼保罗):

你提供了身份证的价值,你只是不知道你是谁.它位于默认路由的路由数据中("{controller}/{action}/{id}"),其默认值为空字符串,对int无效.使用action参数的[Bind]属性排除ID.我的默认路由是:new {controller ="Customer",action ="Edit",id =""} //参数默认值

编辑 - 更新模型技术

我实际上通过使用TryUpdateModel和与之相关的exclude参数数组改变了我再次这样做的方式.

    [HttpPost]
    public ActionResult Add(Venue collection)
    {
        Venue venue = new Venue();
        if (TryUpdateModel(venue, null, null, new[] { "Id" }))
        {
            _service.Add(venue);
            return RedirectToAction("Index", "Manage");
        }
        return View(collection);
    }
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc data-annotations asp.net-mvc-2

69
推荐指数
5
解决办法
5万
查看次数

不需要的属性不断获取data-val-required属性

这是验证的模型:

[MetadataType(typeof(TagValidation))]
public partial class Tag
{
}

public class TagValidation
{
        [Editable(false)]
        [HiddenInput(DisplayValue = false)]
        public int TagId { get; set; }

        [Required]
        [StringLength(20)]
        [DataType(DataType.Text)]
        public string Name { get; set; }
    //...
}
Run Code Online (Sandbox Code Playgroud)

这是观点:

    <h2>Create</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Tag</legend>

        <div>@Html.EditorForModel()</div>

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

<div>
    @Html.ActionLink("Back to List", "Index")
</div>
Run Code Online (Sandbox Code Playgroud)

这是得到的渲染:

<form action="/Tag/Create" method="post">
    <fieldset>
        <legend>Tag</legend>
        <div><input data-val="true" data-val-number="The field TagId must be a number." data-val-required="The …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc jquery-validate

54
推荐指数
3
解决办法
4万
查看次数

为什么MVC模型Binder集需要int,long值?

我有一个像这样的模特

public int Id {get;set;}

[Required]
public string FirstName{get; set}
[Required]
public string LastName{get; set}
Run Code Online (Sandbox Code Playgroud)

Id在DB中自动生成.当我想要调用Create Action时ModelState说"需要Id字段"!!!! 我找到了这个问题,但它不是干净的解决方案.还有其他方法可以解决这个问题吗?

有没有办法改变值类型的Mvc ModelBinder行为?

asp.net-mvc data-annotations asp.net-mvc-4

2
推荐指数
1
解决办法
2278
查看次数