2

JavaScript メソッドを使用してアクションを呼び出す必要があります。つまり、以下のようなリンクのあるページがあります。

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

これをクリックすると、ビューを返すアクションを呼び出したいのですが、POST BACK が発生するようにします。

以下は私が働いていることがわかったものですが、これが正しい方法であるかどうかはわかりません. $post、$ajax、または $json を使用してこれを行う方法はありますか?

これは、アクションにも値を渡す必要があるためです。

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

4 に答える 4

2

I'm assuming that since you did not provide route values in Url.Action(...), the data you'd like to post to the action is being set by the user on the client?

If so, one very simple way to do it is have a form with hidden fields (or perhaps visible if you want direct user interaction) and then set those fields on Sort, and then submit the form.

For example:

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

And:

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

If you are just having the user select sort information, then I suggest having the form inputs visible and use them directly, rather than setting them indirectly when Sort is called.

Once the above is done, you can access the information via the controller using FormCollection . For example:

[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);

}

This will cause the post back to occur with the data being transferred, and the desired view to be displayed.

于 2012-04-12T08:03:17.533 に答える
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 に答える