@model Tuple<AdvanceSearchModel,List<Search@R_404_4234@l>> <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等标记助手?在上述场景中提交表单后,如何保留表单的值?
解决方法
你可以看到它根据html-tag:asp-for中的(lambda)表达式创建了name属性.
你需要什么
您需要一个像此Search@R_404_4234@l [0] .Location这样的表单名称标记
哪里:
> Search@R_404_4234@l是模型上的属性名称,它位于您发布到的控制器方法中
> [0]是列表中的索引
> Location是Search@R_404_4234@l实例列表中iten的属性
我的建议
不要做
>扩展InputTagHelper并添加前缀选项(为名称添加prefex).
>使用视图模型不是元组!
>创建一个仅为Search@R_404_4234@l添加前缀的局部视图(例如,列表中的行,例如:@R_404_4234@l [1])
>在视图中循环遍历列表并调用partial.
结果
@model Search@R_404_4234@l <input asp-for="Location" my-prefix="ListItem[@Model.Id]" class="form-control" />
更好的长期选择
>制作一个HTML模板,说明表单的Search@R_404_4234@l部分应该如何.
>执行ajax调用以获取数据或将数据作为json放在视图中. (或从不做的事情中采取第3步)
>使用结构良好的javascript生成表单.
> On提交而不是提交表单,将from解析为json并将其作为json ajax调用发送.
我为什么这么说?如果在控制器中获得奇怪的数据绑定,则更容易调试.
也就是说,选项1非常好,但是后来可能会导致问题,因为它是非常静态的模板,您无法轻松添加或删除行.
> http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx
> How does MVC 4 List Model Binding work?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。