【发布时间】:2019-10-15 02:28:48
【问题描述】:
我是 MVC 新手,我的控制器中有以下 ActionMethod:
public async Task<ActionResult> ViewSsoProviders(int? page, string nameFilter = "", string bpIdFilter = "",
string protocolFilter = "")
在我看来,我正在尝试通过以下形式调用它:
@{
using (Html.BeginForm("ViewSsoProviders", "SsoAdmin", new
{
page = 1,
nameFilter = Model.ProviderNameFilter,
bpIdfilter = Model.BusinessPartnerIdFilter,
protocolFilter = Model.ProtocolFilterSelection
}))
{
<div id="providerForm">
@Html.ValidationSummary()
<div class="form-group row">
<span class="col-sm-4">
@Html.LabelFor(m => m.ProviderNameFilter)
@Html.TextBoxFor(m => m.ProviderNameFilter, new {@class = "form-control"})
</span>
<span class="col-sm-4">
@Html.LabelFor(m => m.BusinessPartnerIdFilter)
@Html.TextBoxFor(m => m.BusinessPartnerIdFilter, new {@class = "form-control", style = "display: block"})
</span>
<span class="col-sm-4">
@Html.LabelFor(m => m.ProtocolFilterOptions)
@Html.TranslatedDropDownListFor(m => m.ProtocolFilterSelection, Model.ProtocolFilterOptions, new {id = "ddlProtocols", @class = "form-control"})
</span>
</div>
<button class="btn" type="submit" value="Filter">@Html.Translate("Filter")</button>
</div>
该方法正在被命中,但是,过滤器尚未分配值,我可以硬编码“页面”变量,它将以正确的值到达我的控制器,因此问题不在于路由本身。这里有什么明显的原因为什么我的路由变量无法被赋值?
编辑:值得注意的是,如果我改为传递 'null' 而不是视图中的任何路由值,我可以将模型传递给控制器,而只有表单上的字段分配了数据。
【问题讨论】:
-
您从 RouteData.Values["page"] 得到什么结果?
-
@Kadir 当表单点击它并且页面没有出现在值列表中时,我评估了控制器中的 RouteData,我的任何其他预期变量也没有。
-
你为什么不直接删除你在方法中添加的所有 fitler 并简单地将其传递给视图模型?
-
@JamesS 感谢您的建议,但是我在结果表上进行了分页,如果您移至下一页,它不会携带过滤器,我知道如果我可以通过过滤器,分页将有效这边走。我可能不得不重新考虑架构,但有几次我感觉非常接近正确答案。 MVC 非常有用,但也可能令人沮丧。
标签: c# html .net asp.net-mvc model-view-controller