相关疑难解决方法(0)

如何获取列表中项的ModelState键

问题

我有一个用户可以编辑的字段列表.提交模型时,我想检查这些项是否有效.我不能使用数据表示法,因为每个字段都有不同的验证过程,直到运行时才会知道.如果验证失败,我使用ModelState.AddModelError(string key, string error)其中键是要添加错误消息的html元素的名称.由于有一个字段列表,Razor为html项生成的名称就像Fields[0].DisplayName.我的问题是有一种方法或方法从视图模型中获取生成的html名称的密钥?

试图解决方案

我toString()没有运气就尝试了密钥的方法.我也看了整HtmlHelper课,但没有看到任何有用的方法.

代码片段

查看模型

public class CreateFieldsModel
{
    public TemplateCreateFieldsModel()
    {
        FreeFields = new List<FieldModel>();
    }

    [HiddenInput(DisplayValue=false)]
    public int ID { get; set; }

    public IList<TemplateFieldModel> FreeFields { get; set; }


    public class TemplateFieldModel
    {
        [Display(Name="Dispay Name")]
        public string DisplayName { get; set; }

        [Required]
        [Display(Name="Field")]
        public int FieldTypeID { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

调节器

public ActionResult CreateFields(CreateFieldsModel model)
{
    if (!ModelState.IsValid)
    {
        //Where do I …
Run Code Online (Sandbox Code Playgroud)

c# model-view-controller asp.net-mvc modelstate

19
推荐指数
1
解决办法
1万
查看次数

ExpressionHelper.GetExpressionText(表达式)不返回我的属性的名称

我已经实现了一个MVC扩展来格式化我的应用程序中的数字.它基于此处的代码.如下

public static MvcHtmlString DecimalBoxFor<TModel>(this HtmlHelper<TModel> html, Expression<Func<TModel, double?>> expression, string format, object htmlAttributes = null)
{
    var name = ExpressionHelper.GetExpressionText(expression);   
    double? dec = expression.Compile().Invoke(html.ViewData.Model);
    var value = dec.HasValue ? (!string.IsNullOrEmpty(format) ? dec.Value.ToString(format) : dec.Value.ToString()): "";
    return html.TextBox(name, value, htmlAttributes);
}
Run Code Online (Sandbox Code Playgroud)

当我使用以下Razor语法行调用它时

@Html.DecimalBoxFor(model => Model.PointAttributes[i].Data.Y,"0.000", new { @class = "span1 number" })
Run Code Online (Sandbox Code Playgroud)

我得到一个例外,因为我的扩展名中的变量'name'是一个空字符串.我已经尝试将var name行更改为this但它只给了我'Y'的属性名称,而不是我需要将模型绑定回MVC的完整'Model.PointAttributes [i] .Data.Y'.

var name = ((expression.Body is MemberExpression ?((MemberExpression)expression.Body).Member : ((MemberExpression)((UnaryExpression)expression.Body).Operand).Member)).Name;
Run Code Online (Sandbox Code Playgroud)

lambda asp.net-mvc-3

6
推荐指数
2
解决办法
3222
查看次数

ModelState.AddModelError到字段的特定ValidationMessageFor?

我有以下代码来生成html输入和验证消息.

@Html.ValidationSummary(false)
......
<div class="col-md-10">
    @Html.TextBoxFor(model => model.ImageUpload, new { type = "file", name = "file" })
    @Html.ValidationMessageFor(model => model.ImageUpload)
</div>
Run Code Online (Sandbox Code Playgroud)

在我的行动中我有代码

if (.... something wrong with the input ....) 
{
    ModelState.AddModelError("", "Invalid image file.");
    return RedirectToAction(....
Run Code Online (Sandbox Code Playgroud)

但是,它将在验证摘要部分中显示错误消息.是否可以在验证消息部分显示错误消息以进行输入?

asp.net asp.net-mvc asp.net-mvc-5

3
推荐指数
1
解决办法
7328
查看次数