gpt4 book ai didi

c# - 如何获取列表中项目的 ModelState 键

转载 作者:IT王子 更新时间:2023-10-29 04:43:06 26 4
gpt4 key购买 nike

问题

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

尝试的解决方案

我为 key 尝试了 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; }
}
}

Controller

public ActionResult CreateFields(CreateFieldsModel model)
{
if (!ModelState.IsValid)
{
//Where do I get the key from the view model?
ModelState.AddModelError(model.FreeFields[0], "Test Error");
return View(model);
}
}

最佳答案

在深入研究源代码后,我找到了解决方案。有一个名为 ExpressionHelper 的类,用于在调用 EditorFor() 时为字段生成 html 名称。 ExpressionHelper 类有一个名为 GetExpressionText() 的方法,它返回一个字符串,该字符串是该 html 元素的名称。下面是如何使用它...

for (int i = 0; i < model.FreeFields.Count(); i++)
{
//Generate the expression for the item
Expression<Func<CreateFieldsModel, string>> expression = x => x.FreeFields[i].Value;
//Get the name of our html input item
string key = ExpressionHelper.GetExpressionText(expression);
//Add an error message to that item
ModelState.AddModelError(key, "Error!");
}

if (!ModelState.IsValid)
{
return View(model);
}

关于c# - 如何获取列表中项目的 ModelState 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11090445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com