0

モデルがあるとします:

public class HashTable {
   public string sKey { get;set; }
   public string sValue { get:set; }
}

次に、ビューでレンダリングします。

<div>Please enter the key/value pair:</div>
@Html.LabelFor(h => h.sKey, "Key");
@Html.TextBoxFor(h => h.sKey);
@Html.LabelFor(h => h.sValue, "Value");
@Html.TextBoxFor(h => h.sValue);

次に、コントローラーに保存します。

db.HashTable.Add(themodel);

次に、ビューでそれを思い出しますが、値を変更したいだけです:

<div>Please enter the value:</div>
Key: @Model.sKey
@Html.LabelFor(h => h.sValue, "Value");
@Html.TextBoxFor(h => h.sValue, Model.sValue);

次に、それをコントローラーに送信します。問題は、私が行う場合です:

db.Entry(oldmodel).CurrentValues.SetValues(themodel);

ビューに要素がないため、「キー」フィールドをnullにします。

これは、チケットの状態に基づいて特定のフォーム フィールドがビューに表示される場合と表示されない場合がある非常に複雑なシステムの非常に単純な例です (コードはすべて正確ではない可能性があります)。私が本当に必要としているのは、フォーム フィールドがビューに表示されない場合、データベースで更新されないようにする方法です。何か案は?前もって感謝します!

4

2 に答える 2

0

キーもフォームに含めます。そのため、投稿されたときに、モデル/ビューモデルで利用できるようになります。これには Html.HiddenFor ヘルパー メソッドを使用できます。

<div>Please enter the value:</div>
Key: @Model.sKey
@Html.LabelFor(h => h.sValue);
@Html.TextBoxFor(h => h.sValue);
@Html.HiddenFor(x=>x.sKey)

編集:ビューに表示したくないが、有効な既存のデータで保存したいフィールドが非常に多い場合、ビューにそのエントリの ID (例: ProductId) があり、その ID を使用して構築します既存の Product オブジェクトに新しい変更を適用し、保存します。このようなもの

<div>Please enter the value:</div>
Key: @Model.sKey
@Html.LabelFor(h => h.ProductPrice);
@Html.TextBoxFor(h => ProductPrice);
@Html.HiddenFor(x=>x.ProductId)

アクションメソッドは次のようになります

[HttpPost]
public ActionResult Edit (ProductViewModel newModel)
{
  var oldProduct=repositary.GetProduct(newModel.ProductID);
  oldProduct.ProductPrice=newModel.ProductPrice;

  //Now save the oldProdcut

}
于 2012-05-07T18:03:57.513 に答える
0

まず、主キーを隠し要素としてレンダリングする必要があります。

<div>Please enter the value:</div> 
Key: @Model.sKey 
@Html.HiddenFor(h => h.sKey) 
@Html.LabelFor(h => h.sValue); 
@Html.TextBoxFor(h => h.sValue); 

次にUpdateModel()、コントローラーの Edit アクションでメソッドを使用します。このヘルパー関数は、フォーム コレクションからモデルに値をコピーします。どのフィールドが編集可能であったかを把握する必要はありUpdateModelません。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues)
{
    HashTable hash = repository.GetHashTable(id);
    UpdateModel(hash);
    repository.Save();
    return RedirectToAction("Details", new { id = hash.DinnerID });
} 
于 2012-05-07T18:04:55.433 に答える