我正在创建一个由MVC 4视图使用的模型,我一直在创建一个为自己加载值的方法。
在我的控制器中:
public ActionResult Index(int id)
{
MyModel _Model = new MyModel();
_Model.LoadValues(id); //Now that's init'd, get it's values
return View(_Model);
}
问题在于方法“LoadValues()” - 不允许将“this”传递给ref = /
为MyModel:
public class MyModel
{
public string Value1 { get; set; }
public string Value2 { get; set; }
public MyModel()
{
}
public LoadValues(int id)
{
//I would like to pass "this" to the method as a ref so it could directly fill the values
DAL.LoadMyModel(id, ref this); //doesn't work
//My work around is this, but there has to be a better way....
MyModel _TempModel = new MyModel(); //this
DAL.LoadMyModel(id, ref _TempModel); //is
Value1 = _TempModel.Value1; //very
Value2 = _TempModel.Value2; //terribad
}
}
我想我也可以将“LoadValues(int id)”更改为“LoadValues(int id,ref MyModel _TempModel)”,如果这是正确的做法,我想这就是我要做的。但传递“这个”真是太好了! :)
我正在尝试做什么?为什么“this”只读并且不能传递给另一种方法?
答案 0 :(得分:2)
您不需要使用“ref”。您的MyModel类是引用类型,因此将始终通过引用传递。
答案 1 :(得分:1)
如果您想要更改引用所指向的实例,则只需要ref
,因此传递ref this
是非法的,因为您无法更改{{1}指向。
您可以删除调用中的this
关键字(以及ref
定义),DAL将(可能)填写“LoadMyModel
实例的属性。
就个人而言,我更喜欢让DAL 返回实例,而不是填充它们,所以我会在控制器中做这样的事情:
this"
并将public ActionResult Index(int id)
{
MyModel _Model = DAL.LoadMyModel(id);
return View(_Model);
}
类注入模型,因此我不会绑定到特定的DAL
。就目前而言,似乎将模型绑定到DAL,后来可能会再次咬你。