0

我正在创建一个 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”作为引用传递 =/

我的模型:

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”是只读的并且不能传递给另一个方法?

4

2 回答 2

2

你不需要使用“ref”。您的 MyModel 类是引用类型,因此将始终通过引用传递。

于 2013-04-10T15:48:49.493 回答
1

ref如果您想更改引用指向的实例,则只需要在这种情况下,因此传递ref this是非法的,因为您无法更改this指向的内容。

您可以删除ref调用中的关键字(和LoadMyModel定义),DAL 将(可能)填写 "this"实例的属性。

就个人而言,我更喜欢让 DAL返回实例而不是填充它们,所以我会在控制器中做这样的事情:

public ActionResult Index(int id)
{
    MyModel _Model = DAL.LoadMyModel(id); 
    return View(_Model);
}

并将DAL类注入模型,这样我就不会绑定到特定的DAL. 就目前而言,您似乎正在将模型绑定到 DAL,这可能会在稍后回来咬您。

于 2013-04-10T15:56:14.533 回答