2017-06-25 7 views
0

私はタスクリストを持つリストビューを持っています。各タスクには、ドロップダウンリストに状態表示があります。また、私はタスクの状態を変更するコントローラメソッドがあります。 マイビュー:Asp.Net MVC Dynamicalyがajaxリクエスト用のURLを作成します

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.TaskText) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.TillDate) 
     </td> 
     <td> 
      @Html.EnumDropDownListFor(modelItem => item.State, new { @class="state", @onchange="Drop()"}) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.Id }) | 
      @Html.ActionLink("Delete", "Delete", new { id = item.Id }) 
     </td> 
    </tr> 
} 

私のコントローラメソッド:

[HttpPost] 
    public ActionResult UpdateState(int id, int state) 
    { 
     context.UpdateState(id, state); 
     return View(); 
    } 

はまた、私は、このようなjQueryのコードを持っている:私は、アイテムIDが含まれていますAJAXのURLを作成するdynamicyleするにはどうすればよい

function Drop() 
    { 
     $.ajax(
      { 
       url: "UpdateState", 
       type: "POST", 
       success: function() 
       { alert("123123"); } 
      } 
     ); 
     alert("asdasd"); 
    } 

と選択状態?

答えて

1

セクションをレンダリングすることができます。ビュー内にスクリプトセクションをレンダリングします。そして、あなたは動的にURLをレンダリングすることができます。

@section scripts { 
    <script> 

    function Drop() { 
     $.ajax({ 
      url: "UpdateState/?id="@item.Id, 
      type: "POST", 
      success: function() { 
       alert("123123"); 
      } 
     }); 

     alert("asdasd"); 
    } 
    </script> 
} 
+0

これだけです。ありがとう。しかし今、もう一つ問題があります。私の動作mehtodは動作しますが、nevereは成功ajax機能を高めます。エラー500があります。私が理解しているように、私のActionメソッドはView()を返すためです。私は何を返しますか? – Gleb

+1

あなたはおそらく "新しいHttpStatusCodeResult(HttpStatusCode.OK)を返します;"を返します。 HTTP 200が返されます。使用するステートメントにSystem.Netが必要です。 –

0

送信ボタンを使用している場合は、エンティティのすべてのデータをフォーム入力に入れる必要があります。 js ajaxリクエストを使用する場合は、データをどこかから取得する必要があります。それを簡単に行うには、各項目のIDを各行の内側の隠し要素に格納し、各行にクラスを選択できるようにすることです。 JSと

@foreach (var item in Model) { 
    <tr class="taskData"> 
     <td> 
      @Html.DisplayFor(modelItem => item.TaskText) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.TillDate) 
     </td> 
     <td> 
      @Html.EnumDropDownListFor(modelItem => item.State, new { @class="state", @onchange="Drop()"}) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.Id }) | 
      @Html.ActionLink("Delete", "Delete", new { id = item.Id }) 
      <input type="hidden" class="taskId" value="@item.Id" /> 
     </td> 
    </tr> 
} 

、その後:たとえば

function Drop() 
    { 
     var data=$(".taskData").map(function(){ 
         var $this=$(this); 
         return {id:$this.find(".taskId").val(), 
           state:$this.find(".state").val()}; 
      }).get(); 
     $.ajax(
      { 
       url: "UpdateState", 
       type: "POST", 
       data:data, 
       success: function() 
       { alert("123123"); } 
      } 
     ); 
     alert("asdasd"); 
    } 
0

Url.Action("action", "controller", new { id = "123" })はあなたの状況に大きな動作するはずです。 Url.Actionは、コントローラ/アクションにURL文字列を生成します。また、URLパラメータを提供することもできます。

function Drop() 
{ 
    $.ajax(
     { 
      url: "@Url.Action("UpdateState", "YourController", new { id = item.id, state = item.State })" 
      type: "POST", 
      success: function() 
      { alert("123123"); } 
     } 
    ); 
    alert("asdasd"); 
} 
関連する問題