2011-07-20 27 views
0

jquery DataTablesプラグインを使用してdbテーブルの詳細を表示し、Jeditableを使用して各セルをインラインで編集できるようにします。編集したデータは、ポストバックしてデータベースに保存する必要があります。私はここに私のシナリオに非常に似ている例を見つけた:http://naspinski.net/post/Inline-AJAX-DropDown-and-Text-Editing-with-AspNet-MVC-and-jQuery.aspxと私はガイドとしてそれを実装しようとしました。asp.net mvc + jEditable - 編集したセルデータをデータベースに保存する

しかし、私はここにいくつかの問題に直面する:

  1. とどのように私はUrl.Content()と何が渡され、返されるべきで使うべき?

  2. [MissingMethodException]:このオブジェクトに対して定義されたパラメータのないコンストラクタはありません。

私はここで非常に間違ったことを知っていましたが、私は疑いを明確にすることができませんでした。ここ は、私は私のセルを編集可能にするために使用されるスクリプトは次のとおりです。

$(function() { 

    // Initialize a data table 
    var myTable = $('#example').dataTable({ 
     // To use themeroller theme 
     "bJQueryUI": true 
    }); 

    // Make every cell editable 
    $('td', myTable.fnGetNodes()).editable('@(Url.Action("Edit", "Home"))', 
    { 
     indicator: 'saving...', 
     tooltip: 'click to edit...', 
     style: 'inherit', 
     placeholder: 'click to edit' 
    }); 
}); 

と私はDBに編集したデータを保存するために使用されるコントローラのアクション:

[HttpPost] 
    public void Edit(HttpContext context) 
    { 
     string elementId = context.Request.Form["id"]; 
     string fieldToEdit = elementId.Substring(0, 4); 

     //now take anything after those 4 and it is the Id: 
     int idToEdit = Convert.ToInt32(elementId.Remove(0, 4)); 

     // the value is simply a string: 
     string newValue = context.Request.Form["value"].Trim(); 

     var food = dbEntities.Foods.Single(i => i.FoodID == idToEdit); 

     switch (fieldToEdit) 
     { 
      case "name": food.FoodName = newValue; break; 
      case "amnt": food.FoodAmount = Convert.ToInt32(newValue); break; 
      case "sdat": food.StorageDate = Convert.ToDateTime(newValue); break; 
      case "edat": food.ExpiryDate = Convert.ToDateTime(newValue); break; 
      case "type": food.FoodTypeID = Convert.ToInt32(newValue); break; 
      case "cont": food.ContainerID = Convert.ToInt32(newValue); break; 
      default: throw new Exception("invalid fieldToEdit passed"); 

     } 
     dbEntities.SaveChanges(); 


     context.Response.Write(newValue); 
    } 

は本当に感謝...ここにいくつかの助けが必要それ...

答えて

0

最初の質問:

Url.Content()は、サービス提供のために使用すべきです静的ファイルie JSまたはCSS

Url.Content("~/Scripts/jquery.js") 

この静的ファイルへの直接URLを返します。 ~で始まる場合、正しいベースディレクトリの使用が保証されます(つまり、アプリケーションを仮想ディレクトリで実行している場合)。

第二問:

あなたのアクションメソッドアクションとして識別されるActionResultを返すことがあります。コントローラクラスのプロパティとしてHttpContextにアクセスできるため、パラメータを少なくすることができます。それはまだ私がのActionResultと渡す2つのパラメータ(idと値)を返すために私のコントローラを変更 ...フォローアップ作品の多くを必要とする、と私はUrl.Actionに固執するが、私は何とかそれを成し遂げる

[HttpPost] 
public ActionResult Edit() 
{ 
    string elementId = this.HttpContext.Request.Form["id"]; 
} 
0

私のビューで..私はわからない私は何か間違ったことをやっているが、それは動作します..ここで

は私のコントローラの一部です:

[HttpPost] 
    public ActionResult Edit(string id, string value) 
    { 
     string elementId = id; 
     string fieldToEdit = elementId.Substring(0, 4); 

     //now take anything after those 4 and it is the Id: 
     int idToEdit = Convert.ToInt32(elementId.Remove(0, 4)); 

     // the value is simply a string: 
     string newValue = value; 

、スクリプト:

// Make every cell editable 
    $('td', myTable.fnGetNodes()).editable('@(Url.Action("Edit", "Home"))', 
    { 
     indicator: 'saving...', 
     tooltip: 'click to edit...', 
     style: 'inherit', 
     placeholder: 'click to edit' 
    }); 

ありがとうございます!

関連する問題