asp.net mvc:直接为剃刀视图中的模型赋值

时间:2016-05-30 17:50:11

标签: c# asp.net-mvc razor asp.net-mvc-5

我的创建剃须刀里面有以下片段视图:

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

尝试使用如下语句直接设置UnitPrice

@Model.UnitPrice = 100;

我得到了类似空指针异常的内容:Object reference not set to an instance of an object.

如何在发布以创建post方法之前为字段指定常量值?

3 个答案:

答案 0 :(得分:2)

在将模型传递给视图之前,需要在模型中设置属性的值。假设你的模型是

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的原因是您尚未将模型传递给您的视图。

答案 1 :(得分:2)

我认为你可能在文本框加载后尝试设置值,你需要首先从行动中传递模块,如

"返回视图(objModel);"

然后设置值

" @ Model.UnitPrice = 100;"

在您的视图之上和写完之后

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

代码,您将获得编辑器的价值。 感谢..

答案 2 :(得分:0)

您需要在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
}