【发布时间】:2018-09-25 21:37:56
【问题描述】:
我目前正在使用 ASP.NET MVC 构建一个 Web 应用程序。我认为有一些表单可以接收要放入响应后正文的数据。我想将这些输入附加到我的视图模型,然后将我的视图模型传回我的控制器以便处理它们。
这是我的网络应用程序中的一个示例:
<select id="ServiceSelect" size="3" style="width:600px; overflow-y:auto" multiple="multiple">
<option value="Service 1" class="pad">Service 1 </option>
<option value="Service 2" class="pad">Service 2</option>
<option value="Service 3" class="pad">Service 3</option>
</select>
<input type="hidden" id="service" name="service" value="" />
<!-- this puts the two buttons side by side after the select -->
<br />
<input type="submit" name="start" value="Start Service(s)" />
<input type="submit" name="stop" value="Stop Service(s)" />
(隐藏的输入是使用基于选择表单的 jQuery 函数填充的)
我想利用 Razor Pages 的模型绑定特性,以便在选择其中一个提交按钮时将我的隐藏输入添加到我的模型中。目前,通过 Fiddler,我可以看到它正在正确填充响应主体,但我认为本机 MVC 模型绑定可能是一种更清洁的方法。
但是,在这样的代码示例中:
<td>
@Html.DropDownListFor(m => m.Gender /* <- this being what I want */, new List<SelectListItem>
{ new SelectListItem{Text="Male", Value="M"},
new SelectListItem{Text="Female", Value="F"}}, "Please select")
</td>
我无法找到一种方法来包含我使用自己的选择标签(多选、样式)设置的当前功能和样式。
我是 Razor Pages 的新手,所以我不太了解它的语法,因为它是内置函数。我发现原始 HTML 更易于编码、阅读和设置样式,但无法找到任何在线资源来帮助我解决这个问题。
有没有办法在合并自己的 HTML 表单时利用 MVC/Razor Pages 模型绑定特性,而不是内置 @Html 表单的可扩展性较差(据我可能误导的知识和观点)?
【问题讨论】:
-
使用
@Html.DropDownListFor()(或ListBoxFor(),如果你想要<select multiple>)是正确的方法。目前尚不清楚您使用它的问题是什么 -
这是 Razor Pages 在 asp.net-core 中吗?
-
它在 asp.net-mvc 中被标记,但我相信它是一样的。我从未见过 ListBoxFor();如果我要重构并走那条路,它似乎确实是我的问题的解决方案,我不一定反对。我只是好奇是否有一种方法可以在不更改当前 HTML 代码结构的情况下实现模型绑定行为,但如果有必要,我愿意这样做。
-
不,不一样(见链接)。如果你想要
<select multiple>,那么你需要ListBoxFor()- 请参阅Why does the DropDownListFor lose the multiple selection after Submit but the ListBoxFor doesn't? 以获得解释。 -
但是你为什么不想使用
HtmlHelper方法,它可以为你提供双向模型绑定、客户端验证等? (您需要编写数百行附加代码才能使其与您的手册 html 一起正常工作)
标签: c# html asp.net-mvc razor