【发布时间】:2021-03-19 07:29:01
【问题描述】:
我在 ASP.NET Core 5.0 之上使用 C# 编写了一个应用程序。
我有以下视图模型
public class TestVM
{
public Name { get; set; }
public MenuViewModel<string> State { get; set;}
public TestVM()
{
State = MenuViewModel<string>();
}
}
这是我的MenuViewModel的精简版
public class MenuViewModel
{
[BindNever]
public IEnumerable<SelectListItem> Items { get; set; }
}
public class MenuViewModel<T> : MenuViewModel
{
public T Value { get; set; }
}
问题是,当 post 请求进来时,viewModel.State.Value 为空。当我评估Request.Form 时,我确实看到了State.Value 的正确值CA
这是我在控制器中的操作方法的精简版。
[HttpPost, ValidateAntiForgeryToken]
public IActionResult Store(TestVM viewModel)
{
if(ModelState.IsValid)
{
// do some
}
return View(viewModel);
}
如何将请求中的表单数据正确绑定到State.Value 属性?
更新我创建了一个编辑器模板来允许我渲染 MenuVieModel。 ~/Views/Shared/EditorTemplates/MenuViewModel.cshtml 包含以下代码
@model dynamic
@{
if (!(Model is MenuViewModel m))
{
return;
}
dynamic obj = new System.Dynamic.ExpandoObject();
obj.Class = "form-control";
if (Html.ViewData.ModelMetadata.IsRequired)
{
obj.Required = true;
}
}
@Html.DropDownList("Value", m.Options, Html.ViewData.ModelMetadata.Placeholder, obj)
【问题讨论】:
-
显示相关视图部分。
-
@mxmissile 请查看更新后的帖子
-
你如何渲染 MenuViewModel.cshtml?你能分享一下get方法吗?你的
m.Options在剃刀视图中是什么?当我复制你的代码时,它会出错:'MenuViewModel' does not contain a definition for 'Options' and no accessible extension method 'Options' accepting a first argument of type 'MenuViewModel' could be found (are you missing a using directive or an assembly reference?).您的 MenuViewModel 是否包含 Options 属性?
标签: c# asp.net-core asp.net-core-mvc model-binding asp.net-core-5.0