1

したがって、私の見解では、モデルによって提供される値を読み取れるようにしたいだけです。

@{
    var bgPath = "../Files/somedir/" + Model.FilePath;
}

したがって、それを文字列にダンプして、画像を DOM にレンダリングできます。

 <img id="bg-image" class="background-image" src="@bgPath" draggable ="false" alt="" />

これで問題なく動作します。私のビューは正しくレンダリングされます。私の問題は、フォームが送信されると、Model.FilePath が null であるというエラーがスローされることです。

コードは、ビューのメイン (かつ唯一の) フォーム フィールドの外側にすでにあります。

私はこのデータをバインドしたくありません.jsに値を与えるためにのみ使用しています. 他にも機能するように思われるフィールドがたくさんありますが、書き直しをせずに変更するオプションは実際にはありません。

私の質問は、読み取り専用のモデル値を取得する方法ですか?

4

1 に答える 1

3

フォームの非表示フィールドにそれを保持して、フォームの送信時に MVC モデル バインディングが使用できるようにする必要があります。

@using(Html.Beginform())
{
   @Html.HiddenFor(x=>x.FilePath)
   //other elements also 
   <input type="submite" />
}

ただし、隠し値フィールドは、投稿する前にブラウザー拡張機能 (firebug など) を使用して変更できることに注意してください。したがって、ユーザーから新しい値を読み取ってファイルパスを更新していない場合は、次のいずれかを実行します

1) 関連するフィールドのみを更新します。モデルに関連するフィールドのみを更新する Update メソッドを用意します。

 public bool UpdateCustomer(string name,string description,int id);

2) すべてのフィールドを更新する場合、最初にドメイン オブジェクトから読み取り、更新

[HttpPost]
public ActionResult Edit(YourViewModel model)
{
  var domainObject=repo.GetCustomerFromID (model.ID)
  //update only the relevant fields on loaded domain object
  domainObject.Description=model.Description;
  repo.SaveCustomer(domainObject);
  return RedirectToAction("Success");
}
于 2013-02-04T03:06:15.957 に答える