2

我需要使用 javascript 方法调用操作。那就是我有一个带有链接的页面,如下所示,

      <a href="javascript:Sort();" >Click Me to Go</a>

我需要在单击此按钮时调用一个操作,该操作将返回一个视图,并且我希望进行回发。

下面是我发现的工作,但我不确定这是否是正确的方法,有没有办法可以使用 $post、$ajax 或 $json 来做到这一点?

这是因为我也需要将价值传递给操作。

 function Sort() {
        location.href='@Url.Action("ActioName")';
    }
4

4 回答 4

2

我假设由于您没有在 Url.Action(...) 中提供路由值,因此您要发布到操作的数据正在由客户端上的用户设置?

如果是这样,一种非常简单的方法是创建一个带有隐藏字段的表单(或者如果您想要直接的用户交互,则可能是可见的),然后在排序上设置这些字段,然后提交表单。

例如:

<form id='sortform' action='@Url.Action("ActionName")' method='POST'>
   <input type='hidden' name='MyFirstSortValue'>
   <input type='hidden' name='MySecondSortValue'>
</form>

和:

function Sort() {
     var formElem = document.getElementById('sortform');
     formElem.MyFirstSortValue.value = "blah";
     formElem.MySecondSortValue.value = "blah";
     formElem.submit();
}

如果您只是让用户选择排序信息,那么我建议让表单输入可见并直接使用它们,而不是在调用 Sort 时间接设置它们。

完成上述操作后,您可以使用FormCollection通过控制器访问信息。例如:

[HttpPost]
public ActionResult ActionName(FormCollection form)
{
    string myFirstSortValue = form["MyFirstSortValue"];
    string mySecondSortValue = form["MySecondSortValue"];

    // Do something to sort the data in the model...

    return View(yourModel);

}

这将导致回发与正在传输的数据一起发生,并显示所需的视图。

于 2012-04-12T08:03:17.533 回答
0
function Sort() {
$.ajax({
   url:"@Url.Action("ActioName")",
   success:function(data){
       //do some thing
   }
})
}
于 2012-04-12T07:05:23.587 回答
0
@Html.ActionLink("LinkText","Action","Controller")

试试这个

于 2012-04-12T07:36:22.960 回答
0

如果你想从 javascript 调用一个动作,那么下面将起作用。

var somedata = null;
    $.ajax(
   {
       type: "POST",
       url: '@Url.Action("ActioName")',
       data: somedata,
       cache: false,       
       success: function (result) {
           //// if you want to go to a different page, then you can use 
           //// location.href='@Url.Action("ActioName")';
       },
       error: function (xhr, ajaxOptions, thrownError) {
                      alert(xhr.status);
                      alert(thrownError);
       }
   });
于 2012-04-12T07:36:59.947 回答