创建一个模型(类)来处理MVC视图所需要的一切

本文关键字:视图 MVC 一个 模型 创建 处理 | 更新日期: 2023-09-27 18:08:34

我正在创建一个由MVC 4视图使用的模型,我被困在创建一个为自己加载值的方法中。

In my controller:

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

创建一个模型(类)来处理MVC视图所需要的一切

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

在这种情况下,如果你想改变引用指向的实例,你只需要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,这可能会在以后给你带来麻烦。