如何将复杂类型转换为ActionResult

6

我刚接触MVC,正在尝试从控制器中调用存储过程。

在模型中,我有一个edmx,其中包含所有存储过程作为函数。

无法隐式转换类型 System.Collections.Generic.IEnumerable<MVC.Models.xxcomplextype_result> to System.Web.Mvc.ActionResult
存在显式转换。

我在控制器中为实体创建了一个对象,并在一个actionresult函数中调用了调用存储过程的函数,但返回了上述错误。 应该如何将结果集转换为actionresult?

代码样例

public class DBController : Controller
{
    XXXXXXXEntities xXXXXXEntities = new XXXXXXXEntities();

    public IEnumerable<usp_xxxxx_Result> usp_xxxxx()
    {
        return XXXXXEntities.usp_xxxxx();
    }
}

public ActionResult ViewQuery() {
    DBController dBController = new DBController();

    return dBController.usp_xxxxx();
}
2个回答

9
您需要返回一个继承自ActionResult类的类。
可能您想要这样的内容:
public ActionResult ViewQuery() {
        DBController dBController = new DBController();
        return View(dBController.usp_xxxxx());
}

这将返回将 Model 传入的结果的视图。

如果您想返回 JSON,请使用:

public ActionResult ViewQuery() {
        DBController dBController = new DBController();
        return JSON(dBController.usp_xxxxx());
}

运行得非常好:D 顺便问一下,在MVC中调用存储过程的方式是否正确?抱歉,我是新手。 - Vignesh Subramanian
总的来说还可以。但要记住,您的用户界面现在与存储过程的结构紧密绑定。因此,如果您更改存储过程中的属性,则用户界面层也必须更改。一种解决方法是返回一个“ViewModel”,它是一个针对视图而不是数据库的“特定”类。您将把存储过程类转换为“ViewQueryVM”类,并返回该类。 - Gideon

1

.ToArray()解决了这个问题。

public class DBController : Controller
{
    XXXXXXXEntities xXXXXXEntities = new XXXXXXXEntities();

    public IEnumerable<usp_xxxxx_Result> usp_xxxxx()
    {
        return XXXXXEntities.usp_xxxxx();
    }
}

public ActionResult ViewQuery() {
    DBController dBController = new DBController();

    return dBController.usp_xxxxx().ToArray();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接