创建一个处理MVC视图所需内容的模型(类)

时间:2013-04-10 15:44:02

标签: c# asp.net-mvc asp.net-mvc-4

我正在创建一个由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”只读并且不能传递给另一种方法?

2 个答案:

答案 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,后来可能会再次咬你。