2016-08-03 57 views
0

存儲和我有4個領域的典範:如何編輯數據從Index.cshtml

public string facility { get; set; } 
    public string hub{ get; set; } 
    public double customerCount { get; set; } 
    public double cmtsValue { get; set; } 

的cmtsValue是customercount通過此處顯示的是每個customerCount的總和分爲:

 @{  
       double totalValues = Model.Sum(c => c.customerCount); 
       double cmtsValue = (item.customerCount/(totalValues * 1.0)); 
       @Html.Raw(cmtsValue.ToString("0.##%")) 
     } 

該公式在使用Razor代碼的Index.cshtml中完成。在視圖中顯示正確,但在數據庫中它仍然存儲爲0, 如何保存更改或直接從index.cshtml編輯值?我嘗試使用從Create.cshtml和Edit.cshtml的做法,但我有沒有運氣

編輯:我已經嘗試在做我的ViewController是添加一個方法:

public void SaveCMTSValue(int? id, double totalValues, double cmtsValue) 
    { 
     FacilityEditor facilityEditor = db.FacilityEditor.Find(id); 
     if(ModelState.IsValid) 
     { 
      facilityEditor.cmtsValue = cmtsValue; 
      db.SaveChanges(); 
     } 

    } 

然後在我的指數。 CSHTML是下面的代碼:

 @{ 


      double totalValues = Model.Sum(c => c.customerCount); 
      double cmtsValue = (item.customerCount/(totalValues * 1.0)); 
       @Html.Raw(cmtsValue.ToString("0.##%")) 


      @Html.ActionLink("SaveCMTSValue", "SaveCMTSValue", "FacilityEditor", new { id = item.ID, totalValues = totalValues, cmtsValue = cmtsValue }) 

     } 

但我只是得到一個錯誤,什麼一個ActionLink的替代品,如果我想自動添加數據。

錯誤: 執行當前Web請求期間生成未處理的異常。關於異常的來源和位置的信息可以使用下面的異常堆棧跟蹤來標識。

+0

你有什麼試過?向我們展示您嘗試將此數據保存到您的數據庫表的代碼。 – Shyju

+0

@Shyju我給我的帖子添加了更改 – johndoesnow

+0

您應該將相關的代碼添加到原來的問題 – Shyju

回答

0

您正在使用Html.ActionLink方法的錯誤超載。

使用此

@Html.ActionLink("SaveCMTSValue", "SaveCMTSValue", "FacilityEditor" 
      , new { id = item.ID, totalValues = totalValues, cmtsValue = cmtsValue } 
      , new { id="saveCmt"}) 

這將產生與這樣的模型結合將工作相匹配的操作方法的參數名稱的查詢字符串值的鏈接上的鏈接和點擊。

現在,當用戶點擊鏈接時,它將是一個GET請求,通過查詢字符串中的id,totalValues和cmtsValues來存儲SaveCMTSValue操作方法。這意味着任何人都可以嘗試訪問url並在querystring參數中傳遞任何想要的數據,並且您的代碼將其保存到數據庫表中。

通常使用HttpPost操作來更新數據庫表值是一個不錯的主意。所以我建議你將你的操作方法轉換成HttpPost類型。

[HttpPost] 
public void SaveCMTSValue(int? id, double totalValues, double cmtsValue) 
{ 
     // save 
} 

現在點擊鏈接通常會發出GET請求。爲了使這個工作與HttpPost,我們需要捕捉這個鏈接上的點擊事件,併發出一個HttpPost調用使用Ajax。

$(function(){ 

    $("#saveCmt").cilck(function(e){ 
    e.preventDefault(); 
    $.post($(this).attr("href"),function(res){ 
     alert("Updated"); 
    }); 
    }); 

}); 

我也建議你只是在你的操作方法再次使用ID,並再次得到數據,做你的計算和產生的價值並使用該值來保存。

[HttpPost] 
public void SaveCMTSValue(int? id) 
{ 
    // with id, get the releavnt data, generate the value and save 
} 
+0

哎感謝您的幫助,您的原始答案適合我,但很快的問題,如果我希望數據自動更新而不是鏈接正在生成,我將如何能夠這樣做? – johndoesnow

+0

你需要自動定義。當你的原始頁面加載?然後,您可以在呈現您的頁面的GET操作方法中執行相同的代碼(保存到數據庫)。 – Shyju

+0

通過自動,我的意思是,當我創建對象或編輯時,我點擊提交,它會更新數據庫中的值。 – johndoesnow