修改
当我要提交form
时,Asp.net core 2.2中Action
中的模型值显示为空。我有一个ComplexViewModel
包含2个Model
,如下所示:
复杂的ViewModel
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>
现在,当我提交表单时,所有值都是null
中的Action
。我查看了所有输入 id 输入前缀questionViewModel_Title
和所有输入 name questionViewModel.Title
的代码后才发现。
现在如何将数据发布到Action
,或者如何删除前缀?
答案 0 :(得分:0)
尝试像这样将模型更改为大写
public class CreateQuestionComplexModel
{
public QuestionViewModel QuestionViewModel { get; set; }
public IEnumerable<Group> GroupModel { get; set; }
}
您认为
asp-for="QuestionViewModel.Title"
最后在您的控制器中
[HttpPost]
public IActionResult CreateQuestion([FromBody] CreateQuestionComplexModel model)
{
}
答案 1 :(得分:0)
我可以手动添加id
来解决问题。
尝试一下
@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" id="Title" type="text" class="form-control" />
</div>
</div>
<input type="button" value="submit" class="btn" />
</form>
现在id
是Title
而不是questionViewModel_Title
,在控制器中,您可以获得表格数据值。
答案 2 :(得分:0)
在MVC Core 3中,模型中未包含“ asp-for”值的HTML元素将显示为生成错误。
但是,有一种使用HTML“ name”属性将值回传到另一个操作的方法。只需将“名称”值设置为要绑定的action属性即可。您的情况下,值与asp-for属性中建议的值相同
这是一个示例,其中的动作未采用原始模型,而是一个列表和一个整数以调整某些图像文件的大小
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult EditImages(List<string> filenames, int percentage)
Razor视图包含一个输入,该输入具有整数值(在本例中为RANGE元素)和一个字符串数组,其中多个隐藏元素的name属性具有相同的值
<input type="range" min="1" max="99" value="50" class="w-100" id="inputSizePercent" name="percentage">
@for (int index = 0; index < Model.Images.Count; index++)
{
<input type="hidden" name="filenames" value="@Model.Images[index].Filename" />
}