web-dev-qa-db-ja.com

asp.net mvc:レイザービュー内のモデルに直接値を割り当てます

Create razorView内に以下のスニペットがあります。

@Html.EditorFor(model => model.UnitPrice)

次のようなステートメントを使用して、UnitPriceを直接設定しようとしています。

@Model.UnitPrice = 100;

Nullポインタ例外のようなものがあります:Object reference not set to an instance of an object.

Postメソッドを作成するためにpostする前にフィールドに定数値を割り当てるにはどうすればよいですか?

4
VSB

モデルをビューに渡す前に、モデルのプロパティの値を設定する必要があります。あなたのモデルが

public class ProductVM
{
    ....
    public decimal UnitPrice { get; set; }
}

次にGETメソッドで

ProductVM model = new ProductVM()
{
    UnitPrice = 100M
};
return View(model);

値がすべてのインスタンスに適用される「デフォルト」値である場合は、パラメーターなしのコンストラクターでその値を設定することもできます。

public class ProductVM
{
    public ProductVM()
    {
        UnitPrice = 100M;
    }
    ....
    public decimal UnitPrice { get; set; }
}

NullReferenceExceptionの理由は、モデルをビューに渡していないためです。

2
user3559349

GETメソッドで次のようにモデルのコンテンツを渡す必要があります。

public class ViewModel
{
    public ViewModel() 
    {
        UnitPrice = 100M;
    }
    ...
    // if you want constant read-only model in runtime, use readonly keyword before decimal and declare its constructor value
    public decimal UnitPrice { get; set; } 
}

[HttpGet]
public ActionResult YourView()
{
     ViewModel model = new ViewModel() 
     {
          model.Price = 100M; // if the property is not read-only
     };

     // other logic here

     return View(model);
}

// validation on server-side
[HttpPost]
public ActionResult YourView(ViewModel model)
{
    if (ModelState.IsValid)
    {
        // some logic here
    }

    // return type here
}
1

テキストボックスがロードされた後に値を設定しようとしている可能性があると思います。最初に次のようなアクションからモジュールを渡す必要があります。

"return View(objModel);"

次に値を設定します

"@ Model.UnitPrice = 100;"

あなたの見解の上にそして書いた後

"@ Html.EditorFor(model => model.UnitPrice)"

エディターに価値をもたらすコード。ありがとう..

1