【问题标题】:Asp.net MVC 4: Error in Chrome and not in Internet explorerAsp.net MVC 4:Chrome 中的错误,而不是 Internet Explorer 中的错误
【发布时间】:2012-12-28 22:02:49
【问题描述】:

我不确定这里发生了什么。

我有一个在我拥有的 jquery 脚本中调用的操作方法...

                    ondblClickRow: function (id) {
                        debugger;
                        var dummyURL ='@Url.Action("EditEncounter", "EditEncounter", new { encounterId = 0, popId = (int)TempData["POPULATIONID"] })';
                        var path = dummyURL.replace("-2", id);
                        document.location.href = path;
                        //new { encounterId = temp.EncounterId, popId = (int)TempData["POPULATIONID"] }'
                    }

由于某种原因,当我尝试使用 chrome 通过此路由导航到此页面时,我收到此异常:

The parameters dictionary contains a null entry for parameter 'popId' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult EditEncounter(Int32, Int32)' in 'FocusedReadMissionsRedux.Controllers.EditEncounterController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters

但在 IE 中,我调用了 action 方法,然后毫无意外地导航到了相应的页面。我一定是错过了什么?

更新 我注意到我收到了这个查询字符串...

encounterId=2245&popId=2

请注意“&”和“amp;”。我认为我的路线设置不正确。我会尝试几件事,让各位绅士知道会发生什么。

确认

这是我在 Internet Explorer 中的路线

encounterId=2245&popId=2

而且它有效。我只需要弄清楚为什么这个特定请求会发生这种情况。

更新

当我尝试调试我的程序时,Visual Studio 没有更新生成的 cshtml 文件。有没有人遇到过这种情况以及如何解决?

【问题讨论】:

  • 您在 Chrome 开发者工具栏的Network 标签中看到了什么?请求的网址是什么?它是正确的吗?此外,当您检查页面的 HTML 时,标记中 dummyURL 的值是什么。最后一个问题:dummyURL.replace("-2", id) 行是什么?您是否在方法中记录了这个id 变量的值?此外,您似乎在那里使用 TempData,因为您知道如果从中读取的中间请求已经发出,它可能会被驱逐。例如,这可能是一个 AJAX 请求。
  • 我确保 tempdata 字段已水合。那条线是为了在触发某个事件后获得准确的导航路线。我将使用 chrome 检查 html 流量。

标签: internet-explorer google-chrome asp.net-mvc-4 asp.net-mvc-routing


【解决方案1】:

您是否尝试过将您的popId 设置为nullable 类型?听起来它不喜欢您的可选参数是整数而不是可为空的整数。当然我看不到您的控制器和视图,但这就是错误消息告诉我的内容。见下文。

添加int? 而不是int

所以你的ViewResult 需要在你的控制器中有可以为空的参数:

public ViewResult EditEncounter(int? encounterId, int? popId)

更新: 经过进一步讨论,Chrome 似乎没有填写或批准您的 TempData 对象,而 IE 是。也许发布有关此过程的更多信息。

【讨论】:

  • 这将如何解释 IE 的工作原理?这将如何解决问题?是的,他可能不会得到异常,但他会在控制器操作中得到 null,我认为这不是这里想要的。
  • 我想发生的事情是 IE 正在正确填充您的 TempData 对象,而 Chrome 则没有。因此它为空的问题是,当它到达您的EditEncounter 方法时,它会看到参数是必需的,而不是nullable。也许您可以发布更多代码以查看TempData 的填充方式和位置以及正在使用的方法。可能有一些 Chrome 不喜欢的东西。
  • TempData 是服务器端变量。填充它的不是浏览器。
  • 你能发布代码吗?我想如果你将 TempData 转储到 Chrome 上的屏幕上,它会返回 null 信息,而 IE 显然会包含对象数据。
  • 如果 TempData 不包含值,他将在呈现视图时收到 InvalidCastException,因为他将其转换为 (int)。这看起来不像这里的情况。显然,如果 OP 稍微调试一下他的代码并提供更多信息,这样我们就不必在这里猜测了。
【解决方案2】:

我遇到了类似的问题,但能够通过将我的 Url.Action 包含在 Html.Raw 中来解决这个问题,从而摆脱了 amp;根据this solution希望有人能找到帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2013-04-28
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2013-11-19
    相关资源
    最近更新 更多