2016-07-17 7 views
1

質問の回答を示す非常に単純なページがあります。 ユーザーが「便利」または「役に立たない」ボタンをクリックすると、その答えのIDを取得し、jQueryを使用してDB内の有用で無用なフィールドを更新したいと考えています。私の問題は、どのように各AnswerIdをjQueryを使って得ることができるかです。ここでjqueryで値を更新するIDを取得する

はAnswerModelです:ここでは

public class Answer 
    { 
     public int AnswerId { get; set; } 

     [Required] 
     [StringLength(500)] 
     public string Reply { get; set; } 

     public int Useful { get; set; } 

     public int Useless { get; set; } 
    } 

はAnswerControllerです:ここでは

 public async Task<ActionResult> Index() 
    { 
     return(await db.Answers.toListAsync()); 
    } 

    public async Task<JsonResult> Helpful(int? ansId, int? useful, int? uselees) 
    { 
     Answer model = await db.Answers.FindAsync(ansId); 
     if (model != null) 
     { 
      model.Useful = model.Useful + (int)useful; 
      model.Useless = model.Useless + (int)useless; 
      db.Entry(model).State = EntityState.Modified; 
      await db.SaveChangesAsync(); 
      return Json(new { Success = true }, JsonRequestBehavior.AllowGet); 
     } 
     return Json(new { Success = false }, JsonRequestBehavior.AllowGet); 
    } 

はインデックスビューです:

@model IEnumerable<project.Models.Answer> 

    @foreach (var item in Model) 
    { 
     <table class="table"> 
     <tr> 
      <td> 
       Reply: @item.Reply 
      </td>     
      <th> 
       <input type="button" id="usfBtn" value="Useful" /> 
      </th> 
      <th> 
       <input type="button" id="uslBtn" value="Useless" /> 
      </th> 
     </tr> 
     </table> 
    } 

そして、ここではスクリプトです:

$(function() { 
       $("#usfBtn").click(function() {   
        Usf(Alarm); 
       }); 
       $("#uslBtn").click(function() { 
        Usl(Alarm); 
       }); 
       function Usf(callback) { 
       $.ajax(
       { 
         type: "Get", 
         url: "/Answer/Helpful", 
         data: { 
           useful: 1, 
           useless: 0, 
          }, 
         dataType: "json", 
         success: function (result) { 
         callback(result); 
        } 
       }); 
       } 
       function Usl(callback) { 
       $.ajax(
       { 
        type: "Get", 
        url: "/Answer/Helpful", 
        data: { 
          useful: 0, 
          useless: 1, 
        }, 
        dataType: "json", 
        success: function (result) { 
         callback(result); 
        } 
       }); 
      } 
      function Alarm(arg) { 
       if (arg.Success) { 
         window.location.href = window.location.pathname; 
       } 
      } 
    }); 

私の質問はどのように私は各回答のIDを取得することができますが、私はそれらのすべて( "usfBtn"または "uslBtn")のためのただ1つのボタンを持っていますか?

+0

を送ってデータを読み取ります! –

答えて

0

回答IDはボタンのデータ属性を保持できます。

<table class="table"> 
@foreach (var item in Model) 
{ 
    <tr> 
     <td> 
      Reply: @item.Reply 
     </td>     
     <th> 
      <input type="button" data-aid="@item.Id" class="u" 
         data-mode="useful" value="Useful" /> 
     </th> 
     <th> 
      <input type="button" data-aid="@item.Id" class="u" 
         data-mode="useless" value="Useless" /> 
     </th> 
    </tr> 
} 
</table> 

今属性値とあなたが `代わりに.usfBtn`をクラスを使用することができ、サーバーに

$(function(){ 

    $("input.u").click(function(e){ 
    e.preventDefault(); 
    var s= { ansId : $(this).data("aid"), useful :0, useless:0 }; 
    if($(this).data("mode")=="useful") 
    { 
     s.useful = 1; 
    } 
    else if($(this).data("mode")=="useless") 
    { 
     s.useless = 1; 
    } 
    //post this object now 
    $.post("/Answer/Helpful",s,function(res){ 
     //do something with response. 
    }); 

    }); 

}); 
+0

デバッグモードで$ .post( "/ Ans .....")をトレースすると、常にansId = nullになる – V47

+0

ボタンに 'aid 'のデータ属性を設定しましたか? – Shyju

+0

申し訳ありません小さな誤りがありました。回答IDのデータ属性値を正しく読み込めませんでした。今修正されました。更新された答えを見てください。 [Here](http://jsbin.com/hamumaquqo/edit?html,js,console,output)は動作するサンプルです。 – Shyju

関連する問題