2016-08-24 54 views
0

美好的一天!我是asp.net mvc中的新手,需要將JSonResult數據傳遞給控制器​​中的方法。在我查看,我有這個表:通過JSon結果到控制器方法

<table id="tbl_orderItems" class="table table-striped table-bordered table-hover dt-responsive nowrap" cellspacing="0"> 
 
      <thead> 
 
       <tr> 
 

 
        <th>Item Code</th> 
 
        <th>Quantity</th> 
 

 
        <th>Unit</th> 
 
        <th>Item Description</th> 
 
        <th>Status</th> 
 
        <th>Action</th> 
 
       </tr> 
 
      </thead> 
 

 
      @if (TempData["listOrder"] != null) 
 
      { 
 
       foreach (var items in TempData["listOrder"] as List<ebms.ViewModels.OrderItems>) 
 
       { @Html.HiddenFor(modelItem => items.Id, new { @id = "productId" }) 
 
       <tr> 
 

 
        <td id="productCode">@items.PRODUCT_CODE</td> 
 
        <td contenteditable="true" id="quantity">@items.QUANTITY_ORDERED 
 
         <input id="save" type="button" value="Save" /> 
 
        </td> 
 
        <td id="unit">@items.MEASUREMENT_NAME</td> 
 
        <td id="itemDesc">@items.ITEM_DESCRIPTION</td> 
 
        <td id="status">@items.tmpStatus</td> 
 
        <td> 
 
         @Html.ActionLink("Remove", "Remove", new { id = items.Id }, 
 
             new { onclick = "return confirm('Are sure want to remove?');" }) 
 
        </td> 
 
       </tr> 
 

 
       } 
 

 
      } 
 

 
     </table>

此表的值從另一個表來。但是一列,即數量具有值= 0,因爲它將被輸入到表格本身中。

因此,我製作了QUANTITY_ORDERED列可編輯。然後,它會通過這個傳遞值:

<script> 
 

 
    $(document).ready(function() { 
 
     $("#save").prop("disabled", true); 
 

 
     $("div").on('input', function() { 
 
      $("#save").prop("disabled", false); 
 
     }); 
 

 
     $("#save").click(function() { 
 
      var modifiedQuanity = {}; 
 

 
      modifiedQuanity.Id = $("#productId").text(); 
 
      modifiedQuanity.QUANTITY_ORDERED = $("#quantity").text(); 
 

 

 
      $.post("/Sales/Save", modifiedQuanity, function (msg) { 
 
       $("#save").prop("disabled", true); 
 
       $("#msg").html("<strong>" + msg + "</strong>"); 
 
      }); 
 

 
     }); 
 
    }); 
 

 
</script>

在我的控制,我有這個JSonResult方法保存這是應該接受QUANTITY_ORDERED的視圖中的價值。

 public JsonResult Save(ORDER_DETAILS obj) 
 
     { 
 
      using (ApplicationDbContext db = new ApplicationDbContext()) 
 
      { 
 
       ORDER_DETAILS existing = db.ORDER_DETAILS.Find(obj.PRODUCT_ID); 
 
       existing.QUANTITY_ORDERED = obj.QUANTITY_ORDERED; 
 
       db.SaveChanges(); 
 
       return Json("Order saved successfully!"); 
 
      } 
 
     }

然後我需要將JsonResult數據傳遞給控制器​​的方法爲最後保存。

但是我的問題是,它似乎沒有將值傳遞給保存方法。我無法弄清楚如何將JsonResult數據傳遞給控制器​​方法。有人可以幫我解決這個問題嗎?我錯過了什麼?

+0

您正在從browswer'modifiedQuanity.Id'發佈'Id',但在控制器ORDER_DETAILS中使用'PRODUCT_ID' existing = db.ORDER_DETAILS.Find(obj.PRODUCT_ID);' – shakib

+0

@shakib我使用** Id **在我看來,因爲它是我從中獲取值的PRODUCT表的PK。然後我傳遞該ID,但我使用PRODUCT_ID,因爲這是在** ORDER_DETAILS **模型中調用的方式。 –

+0

@shakib您能否提出另一種存儲內容可編輯值的方法,然後將該值傳遞給控制器​​? –

回答

0

你應該

$.post('@Url.Action("Save", "Sales")' 

這種替代

$.post("/Sales/Save" 

會讓MVC確保鏈接到控制器的行動是正確的。

其次,你說你想傳遞數據到另一個叫做「AddOrder」的方法,而不是直接保存在你的「Save」方法中。

我不知道這個你的方法的簽名是什麼,所以我會認爲這是一個被稱爲「MyOtherClass」類中的一個靜態方法,並接受一個ORDER_DETAILS實例作爲參數,如:

public static void AddOrder(ORDER_DETAILS detsails) 
{ 
    //... code here 
} 

在這種情況下,你的「保存」的方法是很簡單的,就像這樣:

public JsonResult Save(ORDER_DETAILS obj) 
{ 
    MyOtherClass.AddOrder(obj); 
    return Json("Order saved successfully!"); 
} 

因此,如果確切的方法細節是不同的,你會需要,以使其適應您的具體情況。

+0

只是想澄清,**。AddRecord **是什麼? –

+0

抱歉,誤解了你的評論。它應該是AddOrder不應該的:-)已編輯答案 – ADyson

+0

對。我有點困惑:)這是我的AddOrder方法,**公共ActionResult AddOrder(OrderItems orderitem,ORDER_DETAILS細節)** –