-3

Projects エンティティがあります。以下に示すように、プロジェクトのリストがスキャフォールディング リスト ビューに表示されます。Edit-Details-Delete は、テンプレートによって生成される ActionLinks です。それぞれが新しいコントローラー アクションにリンクされ、別のビューをロードします。

ProjectName  | Created By | Created On | Status |
-------------|------------|------------|--------|--------------------
Test Project | USER1      | 12/31/2010 |  NEW   | Edit |Details |Delete

各プロジェクトには、ステータス (新規、承認済み、拒否) があります。ビューをロードしない承認および拒否というリストにリンクを追加したいと考えています。プロジェクトのステータスを変更するだけです。これらは HTTP 投稿リンクになると思います。私はグーグルで検索しましたが、これの良い例は見つかりませんでした。

ProjectName  | Created By | Created On | Status |
-------------|------------|------------|--------|------------------------------------
Test Project | USER1      | 12/31/2010 |  NEW   | Edit |Details |Delete|Approve|Denied
4

2 に答える 2

2

AJAXを使用できます:

@Ajax.ActionLink(
    "approve project", 
    "Approve", 
    new { projectId = item.ProjectId }, 
    new AjaxOptions { HttpMethod = "POST" }
)

もちろん、プロジェクトの承認を処理する対応するコントローラーアクションがあります。

[HttpPost]
public ActionResult Approve(int projectId)
{
    ...
}

OnSuccessのプロパティとOnFailureプロパティを使用してAjaxOptions、これらのイベントの場合に呼び出されるそれぞれのjavascript関数を定義することもできます。

Ajax.*ヘルパーが何か役に立つことをするためには、jquery.unobtrusive-ajax.jsあなたのページにスクリプトを含める必要があると言う必要があります:

<script type="text/javascript" src="@Url.Content("~/scripts/jquery.unobtrusive-ajax.js")"></script>

web.configで控えめなAJAXを有効にしておく必要があります。

<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    ...
</appSettings>
于 2012-07-02T13:42:10.333 に答える
0

@Html.ActionLinkヘルパー メソッドはアンカー タグの HTML マークアップを生成し、それらをクリックすると通常はHTTPGETメソッドが実行されます。HTTPPOSTアクションを実行する場合は、ヘルパーと JavaScript を使用してリンクを生成しHtml.ActionLink、デフォルトのリンク動作をオーバーライドしてHTTPPost、データベースのステータスを変更する別のアクション メソッドを実行できます。preventDefaultメソッドを使用して、デフォルトのリンクの動作を防ぐことができます (新しいページに移動します)。

@Html.ActionLink("Approve","Approve","Project",new { @id="someid"},new { @class="delClass"})
@Html.ActionLink("Denied","Denied","Project",new { @id="someid",anotherParam="someval"},new { @class="delClass"}))

コントローラー名がProject.

actionデフォルトのリンク動作をオーバーライドし、メソッドへの AJAX 投稿 (HTTP 投稿) を行う jQuery コードを用意します。

<script type="text/javascript">
 $(function(){

    $(".delClass").click(function(e){

       e.preventDefault();  // prevent the default behaviour
       $.post(($this).attr("href"),function(data){
           //Do whatever with the resutl received from the action method call.
           //alert(data);  // may be alert ?
       });

    });

 });    
</script>

Actionこれを今すぐ処理する方法を用意してください

[HttpPost]
public ActionResult Approve(string id)
{
  //Do the backend transaction with the id value.

  return Content("Approved");
}
[HttpPost]
public ActionResult Denied(string id,string anotherParam)
{
  //Do the backend transaction with the parameters value.

  return Content("Denied");
}
于 2012-07-02T13:44:04.407 に答える