asp.net mvc: directly assign value to model inside

2019-05-10 23:07发布

I have below snippet inside my Create razor View:

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

trying to directly set UnitPrice using statement like this:

@Model.UnitPrice = 100;

I got something like null pointer exception : Object reference not set to an instance of an object.

How can I assign constant value to a field before posting to create post method?

3条回答
家丑人穷心不美
2楼-- · 2019-05-10 23:26

You need to pass the model's content like this on GET method:

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
}
查看更多
我欲成王,谁敢阻挡
3楼-- · 2019-05-10 23:43

You need to set the value of the property in the model before you pass the model to the view. Assuming your model is

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

then in the GET method

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

If the value is a 'default' value that applies to all instances, you can also set its value in a parameter-less constructor

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

Note that the reason for the NullReferenceException is that you have not passed a model to your view.

查看更多
贪生不怕死
4楼-- · 2019-05-10 23:46

I think you may be trying to set value after textbox get loaded you need to first pass module from action like

"return View(objModel);"

and then you set value

"@Model.UnitPrice = 100;"

on top of your view and after write

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

code you will get value into editor. Thanks..

查看更多
登录 后发表回答