【发布时间】:2017-10-16 06:40:22
【问题描述】:
正在开发 mvc5 应用程序。在我的 ajax 表单中,我有很多字段,包括一个隐藏的输入...
<input id="currentView" name="currentView"
value="calendar" type="hidden" />
每当我发布到我的操作时,currentView 都是空的,除非我将类型更改为“文本”。然后我得到了很好的价值。
动作的开始被定义为...
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult GetEvents(string userName, string currentView,
string theStatus)
{
其他参数在模型中并且很好。这是问题吗? currentView 是否必须在模型中才能使隐藏字段起作用?我想我只是对为什么当我将类型更改为文本时它起作用感到困惑。我的理解是,只要我定义了一个名称,就可以在请求变量中访问它。
谢谢!
**** 更新:这是我的 Ajax 表单的顶部 *****
@using (Ajax.BeginForm(
new AjaxOptions
{
HttpMethod = "POST",
Url = "/Scheduler/GetEvents",
UpdateTargetId = "mainTable"
}))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<input id="currentView" name="currentView"
value="calendar" type="text"
style="display: none;" />
如您所见,我使用 display: none 破解了它。当我将类型更改为“隐藏”时,它不起作用。
【问题讨论】:
-
你在做什么对我来说似乎没问题。 ModelBinder 使用 name 属性来绑定数据,所以你的理解是对的。你使用 Ajax.BeginForm 对吗?
-
一切看起来都很好。你能给我们更多的细节,比如整个 Html 吗?
-
@User3250 是的。我在上面更新了它。谢谢
-
是的,没有问题,currentView 不需要在模型中才能使隐藏字段工作。所以为了调试你的问题,如果你提供完整的 html 代码,那么它将对我们有所帮助。
-
@KarthikElumalai 谢谢。我的客户不希望我这样做。而且,cshtml非常广泛,涉及部分视图等......所以,我不能完整地发布它。但是,令人困惑的是,我更改了类型,它要么工作要么不工作。嗯.... :-(
标签: c# asp.net-mvc