【发布时间】:2019-06-10 14:36:11
【问题描述】:
编辑
当我想提交 form 模型值时,在 Asp.net core 2.2 中的 Action 中显示 null。我有一个 ComplexViewModel 包含 2 个 Model 像这样:
复杂视图模型
public class CreateQuestionComplexModel
{
public questionViewModel questionViewModel { get; set; }
public IEnumerable<Group> GroupModel { get; set; }
}
控制器
[HttpGet]
public IActionResult CreateQuestion(CreateQuestionComplexModel model)
{
return View(model);
}
[HttpPost]
public IActionResult CreateQuestion(CreateQuestionComplexModel model)
{
//model is null here
//ModelState
}
这是我的看法
@model porseman.Models.ComplexModel.CreateQuestionComplexModel
@Html.PartialAsync("SideBarMenu", Model.GroupModel)
<form class="row" asp-Controller="Question" asp-Action="CreateQuestion" method= "post">
<div class="form-group">
<div class="col-xs-10">
<input asp-for="questionViewModel.Title" type="text" class="form-control" />
</div>
<label asp-for="questionViewModel.Title" class="control-label col-xs-2"></label>
</div>
<input type="button" value="submit" class="btn" />
</form>
现在,当我提交表单时,Action 中的所有值都是 null。我在查看代码后发现所有输入 id 都有前缀 questionViewModel_Title 和所有输入 name questionViewModel.Title。
现在如何将数据发布到Action 或如何删除前缀?
【问题讨论】:
-
模型绑定不支持元组。使用另一个类(视图模型)来封装元组中的内容,然后将其用作您的模型。
-
@ChrisPratt 首先我使用
complex ViewModel。但也有同样的问题。例如,当我使用@model.ComplexViewModel.Title输入 id 变成ComplexViewModel_Title -
这不是问题,这是设计使然。句点是基于 HTML 规范的 id 属性的无效字符。结果,它们被更改为该属性的下划线。但是,这个想法与发布的数据或模型绑定无关,所以没关系。 name 属性很重要。
-
@ChrisPratt All input name display
ComplexViewModel.nameand all input id displayComplexViewModel_idand the problem isnullvalue in @987654339 @。我该如何解决? -
不要添加“@Model”。位到
asp-for。
标签: jquery asp.net-mvc asp.net-core razor