将参数从JavaScript传递到控制器

时间:2013-01-14 16:19:23

标签: c# asp.net-mvc razor asp.net-mvc-routing

我正在尝试将字符串值传递给创建项对话框,并且不确定如何执行此操作。

这是我视图中的代码:

JavaScript的:

function newRoute() {
    $.ajax({
        url: '@Url.Action("Create")',
        success: function (data) {
            if (data == "success") //successfully created the new route
                window.location.href = '@Url.RouteUrl(ViewContext.RouteData.Values)'
            else
                $.facybox(data); // there are validation errors, show the dialog w/ the errors
        }
    });
}

查看:

<td>@route</td>
<td>
    <a href="javascript:newRoute();" class="button">Add</a>
</td>

控制器

public ActionResult Create(string routeName = "")
    {
        PopulateRouteInfoViewBag();

        var newRoute = new RouteInformation();

        newRoute.Name = routeName;

        return View(newRoute);
    }

我正在尝试获取@route中的值并将其传递给Create控制器,以使用传入的字符串值弹出我的对话框。

2 个答案:

答案 0 :(得分:0)

使用ActionLink html帮助器方法并传递路径变量。

@{
   string route="somevaluehere";
 }
@Html.ActionLink("Add","Create","YourControllerName",
                          new { routeName=route},new {@id="addLnk"})

现在处理点击事件

$(function(){

   $("#addLnk").click(function(e){
     e.preventDefault();  //prevent normal link click behaviour
     var _this=$(this); 

      //do your ajax call now
      $.ajax({
        url: _this.attr("href"),
        success: function (data) {
            if (data == "success") //successfully created the new route
                window.location.href = 'someValidUrlHere'
            else
                $.facybox(data); 
         }
       });

   });     

});

此外,您可以考虑构建新页面的路径(操作方法)并将其作为JSON结果的一部分返回,并让客户端从JSON中读取它。

而不是将路由变量值附加到查询字符串,您可以将其视为邮件正文的一部分。

答案 1 :(得分:0)

有两种选择。 1,使用Url.Action("controllerName", "actionName", new {routeName = "your route name here"})或2,使用传递给$ .ajax的对象的data属性。

对于2你的javascript看起来像

function newRoute() {
    $.ajax({
        url: '@Url.Action("Create")',
        data: {
            route: "your data here"
        }
        success: function (data) {
            if (data == "success") //successfully created the new route
                window.location.href = '@Url.RouteUrl(ViewContext.RouteData.Values)'
            else
                $.facybox(data); // there are validation errors, show the dialog w/ the errors
        }
    });
}