如何在 MVC 视图中显示存储过程结果

Posted

技术标签:

【中文标题】如何在 MVC 视图中显示存储过程结果【英文标题】:How To Show StoredProcedure Result in MVC View 【发布时间】:2016-08-07 09:20:14 【问题描述】:

我无法从数据库中获取存储过程结果并显示在视图中。在 DB Storedprocedure 中工作正常

我在 MsSQL 中的存储过程

ALTER PROCEDURE [dbo].[Search]
    (
    @param1 varchar(max), 
    @param2 varchar(max),
    @param3 varchar(max),
    @param4 varchar(max)
    )
AS
BEGIN
select BusinessLogo,BusinessTitle,Details,ProfileUrl,Location,Country from ClientBusinesses where location like '%'+@param1+'%' and location like '%'+@param2+'%'
 and location like '%'+@param3+'%' and location like '%'+@param4+'%'
END

我在哪里执行 StoredProcedure 的控制器代码

我尝试使用以下代码,但面对但在 ViewBag 中看不到数据它在 ViewBag 上的 Foreach 循环中出现错误,即 BusinessLogo 列不存在,但您可以在 sp 中看到我正在获取 BusinessLogo 以及其他列的类似错误

ViewBag listdata = db.Search(Country, state, city, str);

我也试过下面的代码 -

 List<ClientBusiness> listd=new List<ClientBusiness>();
 listd=db.Search(Country, state, city, str);

但它给出了错误

Error   2   Cannot implicitly convert type 'System.Data.Entity.Core.Objects.ObjectResult<string>' to 'System.Collections.Generic.List<PromoteMyName.ClientBusiness>'    F:\Desktop DATA\Desktop 23 Feb\PromoteMyName\PromoteMyName\Controllers\HomeController.cs    135 23  PromoteMyName

在视图中我正在使用下面的简单代码

@foreach(var item in  ViewBag.listdata)
   

这是否可以通过 viewbag 将从 sp 获取的数据传递给 view ?

【问题讨论】:

您需要将数据投影到模型中并将该模型的集合传递给视图。 @StephenMuecke 你说的是视图模型吗 我正在使用 dbfirst 方法。 ClientBusiness 是我的表。如果我在 Storedprocedure 中使用 Select *,我可以通过 clientbusiness 模式来查看 这是否可以将从 sp 获取的数据通过 viewbag 传递给查看 是的,在视图中创建一个具有所需属性的视图模型,并将该模型的集合传递给视图。 【参考方案1】:

做类似的事情,这不是确切的解决方案,但请遵循此思路。 1) 定义您的 Viemodel 以存储来自 StoredProc 的数据。

AddressModel.cs

public class AddressModel

    public string City get; set;
    public string State get; set;

AddressSearchResultModel.cs

public class AddressSearchResultModel

    public List<AddressModel> AddressResults get; set;

2) 从storedproc 获取数据后,将数据传递给定义的模型。

var dataFromStoredProc=db.Search(Country, state, city, str);
// Translate the addressSerachResultModel to addressSearchResultModel
var addressSearchResultModel= new AddressSearchResultModel();
var addressModel= new AddressModel()
foreach(var item in dataFromStoredProc )

    //Assign every property from the dataFromStoredProc to     AddressModel
    //and add it to the list
    addressSearchResultModel.Add(AddressModel);

3) 最后从你的视图模型渲染视图

[HttpGet]
public ActionResult GetResults()

    var dataFromStoredProc=db.Search(Country, state, city, str);

    // Translate the addressSerachResultModel to AddressSearchResultModel
    var addressSearchResultModel= new AddressSearchResultModel();
    var addressModel= new AddressModel()
    foreach(var item in dataFromStoredProc )
    
        //Assing every property from the dataFromStoredProc to AddressModel
        //and add it to the list
        addressSearchResultModel.Add(AddressModel);
    

    return View(addressSearchResultModel);       

【讨论】:

以上是关于如何在 MVC 视图中显示存储过程结果的主要内容,如果未能解决你的问题,请参考以下文章

提交 MVC 后在同一视图中显示结果

带有多个参数的存储过程的 Telerik 报告不显示结果

SQL-视图与存储过程

asp.net mvc 从视图中的文本框获取数据返回存储过程以编辑记录

Java学习总结(十八)——MySQL数据库MySQL数据库中的视图,函数,存储过程中常见循环

MVC-5 对存储过程使用复杂类型的函数;创建视图给出错误:'无法检索 MyProject.Models.Movies_Result 的元数据