从客户端传递给控制器​​时,Asp.Net MVC参数为null

时间:2016-08-11 08:10:05

标签: javascript asp.net-mvc

的Javascript

我有一个方法如下,

        function OpenRecord(id ,module ,screen) {
            var url = '@Url.Action("OpenRecord", "Management", new { id = "_id", module = "_module",screen = "_screen" })';
            url = url.replace("_id", encodeURIComponent(id));
            url = url.replace("_module", encodeURIComponent(module));
            url = url.replace("_screen", encodeURIComponent(screen));
            window.location.href = url;
        }

控制器

public ActionResult OpenRecord(string id, string module, string screen)
    {
        Int64 someID = Convert.ToInt64(id);


        /*some act**/

        return RedirectToAction(screen, module, new { id = someId});


    }

当我运行时,我得到 id 模块屏幕 param传递 null 。当我在chrome dev工具上检查客户端时,我看到javascript方法的所有参数都被填充,而url变量中的最终url如下所示;

/Management/OpenRecord/112?module=Customer&screen=MUSTRTANML

我想那放大器&amp ;;实体破坏了我的控制器以获得最后一个参数,但我不确定,我不知道如何解决这个问题。

提前致谢。

2 个答案:

答案 0 :(得分:0)

只需将Url.Action包裹在Html.Raw()中即可。或者你可以进一步采用替代方法 - url = url.replace("&", "&")。无论你喜欢什么,我个人都会继续Html.Raw

答案 1 :(得分:0)

你需要用值

构建你的url字符串
var url = '@Url.Action("OpenRecord", "Management", new { id = "_id", module = "_module",screen = "_screen" })';

这是错的,应该是

var url = '/Management/OpenRecord?id=' + _id + '&module='+ _module + '&screen='+ _screen;

上面会传递变量的值而不是名称,你不能执行Url.Action作为JavaScript的一部分这是Razor代码