首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用多个模型时的Asp.net核心post表单数据

使用多个模型时的Asp.net核心post表单数据
EN

Stack Overflow用户
提问于 2019-06-10 22:36:11
回答 2查看 6.2K关注 0票数 0

当我想要提交form模型时编辑在Asp.net核心2.2的Action中显示null。我有一个包含2个ModelComplexViewModel,像这样:

Complex ViewModel

代码语言:javascript
复制
public class CreateQuestionComplexModel
{
    public questionViewModel questionViewModel { get; set; }
    public IEnumerable<Group> GroupModel { get; set; }
}

控制器

代码语言:javascript
复制
    [HttpGet]
    public IActionResult CreateQuestion(CreateQuestionComplexModel model)
    {
       return View(model);
    }

    [HttpPost]
    public IActionResult CreateQuestion(CreateQuestionComplexModel model)
    {
     //model is null here
     //ModelState

    }

这里是我的视图

代码语言:javascript
复制
@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。在查看代码后,我发现所有输入名称都是前缀questionViewModel_Title,所有输入名称都是 questionViewModel.Title。现在,我如何将数据发布到Action ?如何删除前缀?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-12 03:34:34

我可以手动添加id来解决问题。

尝试此

代码语言:javascript
复制
@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>

现在idTitle而不是questionViewModel_Title,在控制器中你可以获取表单数据值。

票数 0
EN

Stack Overflow用户

发布于 2020-07-02 19:19:27

在MVC Core 3中,带有不在模型中的"asp-for“值的Html元素将显示为构建错误。

但是,有一种方法可以使用HTML "name“属性将值回发到另一个操作。只需将"name“值设置为要绑定到的action属性。在您的示例中,值与asp-for属性中建议的值相同

下面是一个示例,其中一个操作不采用原始模型,而是一个列表和一个整数来调整一些图像文件的大小

代码语言:javascript
复制
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult EditImages(List<string> filenames, int percentage)

Razor视图包含一个输入,该输入具有整数值(在本例中为RANGE元素)和一个字符串数组,其中多个隐藏元素的name属性具有相同的值

代码语言:javascript
复制
<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" />
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56528483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档