ASP.NET Core使用单一形式的两个模型

我正在使用Tuple在视图中传递两个模型,如下面给出的代码.

@model Tuple<AdvanceSearchModel, List<SearchUserModel>>
<form role="search" method="post" action="/Public/AdvanceSearch">
            <div class="form-group">
                <label>Name</label>
                <input name="FullNames" type="text" class="form-control" value=""/>
            </div>
            <div class="form-group">
                <label>Product</label>
                <input name="Products" type="text" class="form-control" value="" />
            </div>
            <div class="form-group">
                <label>Location:</label>
                <input name="Location" type="text" class="form-control" value="" />
            </div>
            <div class="form-group">
                <label>State</label>
                <input name="States" type="text" class="form-control" value="" />
            </div>
            <div class="form-group">
                <label>Country</label>
                <input name="Countries" type="text" class="form-control" value=""/>
            </div>
        </form>

输入中的所有名称属性都是AdvanceSearchModel.在将多个模型传递给包含一个或多个表单的视图时,如何使用asp-for等标记助手?在上述场景中提交表单后,如何保留表单的值?

最佳答案 正如你在
source code of InputTagHelper中看到的那样

你可以看到它根据html-tag:asp-for中的(lambda)表达式创建了name属性.

你需要什么

您需要一个像此SearchUserModel [0] .Location这样的表单名称标记

哪里:

> SearchUserModel是模型上的属性名称,它位于您发布到的控制器方法中
> [0]是列表中的索引
> Location是SearchUserModel实例列表中iten的属性

我的建议

不要做

>扩展InputTagHelper并添加前缀选项(为名称添加prefex).
>使用视图模型不是元组!
>创建一个仅为SearchUserModel添加前缀的局部视图(例如,列表中的行,例如:usermodel [1])
>在视图中循环遍历列表并调用partial.

结果

@model SearchUserModel
<input asp-for="Location" my-prefix="ListItem[@Model.Id]" class="form-control" />

更好的长期选择

>制作一个HTML模板,说明表单的SearchUserModel部分应该如何.
>执行ajax调用以获取数据或将数据作为json放在视图中. (或从不做的事情中采取第3步)
>使用结构良好的javascript生成表单.
> On提交而不是提交表单,将from解析为json并将其作为json ajax调用发送.

我为什么这么说?如果在控制器中获得奇怪的数据绑定,则更容易调试.

也就是说,选项1非常好,但是后来可能会导致问题,因为它是非常静态的模板,您无法轻松添加或删除行.

列表的正确html名称标签的引用:

> http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx
> How does MVC 4 List Model Binding work?

点赞