asp.net MVC3 C#:将查询作为参数传递并显示结果

时间:2011-12-17 00:18:57

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

我是asp.net,C#的新手,并且基于流行的音乐商店应用程序构建MVC应用程序。 我准备好了基本的导航功能,并且我已经达到了完全空白的地步。基本上,我的asp页面显示一个SQL查询(在同一台机器上保存在SQL DB中)

需要: 我需要在此查询旁边有一个按钮,当单击该按钮时,通过OLEDB连接到另一个DB,并运行查询并在弹出窗口中显示结果。

问题: 如何将查询(从DB中获取)作为参数传递给下面的代码,如何在窗口中弹出结果。

请指点我正确的方向。下面的代码来自一个用于测试连接等的alson asp页面。基本上我需要将查询作为参数传递(替换下面的查询)并将结果放在弹出窗口中。

<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Data.Odbc" %>

<script runat="server">
sub Page_Load
        Dim dbconn, sql, dbcomm, dbread
        dbconn = New OleDbConnection("Provider=xxxx;Password=xxxx;User ID=xxxx;Data Source=xxxx;Initial Catalog=xxxx;Port=xxxx;")
dbconn.Open()
        sql = "Select ID from TABLE1"
        dbcomm = New OleDbCommand(sql, dbconn)
        dbread = dbcomm.ExecuteReader() <%-- Call this method within oledbcommand--%>

  If dbread.Read = False Then
                    MsgBox("No Data Check")
                Else                    
                  Response.Write("<table>")
                    Do While dbread.Read()
                        Response.Write("<tr>")
                        Response.Write("<td>")
                        Response.Write(dbread(0))
                        Response.Write("</td>")
                        Response.Write("</tr>")
                    Loop
                  Response.Write("</table>")

 End If
         dbconn.Close()

end sub
</script>

其他细节

控制器类 。

public ActionResult DisplayResult(String Qry)        
   {
       List<QuerySet> QueryToExecute = new List<QuerySet>();
       return View(QueryToExecute);    

为此控制器提供DATA的VIEW,这是从我的SQL DB获取的查询,应该在单独的服务器上执行单独的数据库。

<ul> 
@foreach (var ShowQueries in Model.Queriess)
{ 
    <li> 
       @Html.ActionLink(ShowQueries.Query, "DisplayResult", new { Qry = ShowQueries.Query }) 
    </li> 
} 

ISSUE: 我应该如何使用名为'DisplayResult'的视图来处理上面的视图提取的查询并执行另一个DB。 我希望我可以使用Webform视图而不是剃刀视图,但无论哪种方式我都无法传递参数 任何想法都赞赏

2 个答案:

答案 0 :(得分:3)

MVC的目的是将数据连接移出View(aspx页面)并进入Controller。

阅读更多MVC教程,并购买一两本书。实际上,您应该将数据填充到控制器上的viewmodel中,然后将该viewmodel传递给视图。这样,视图对如何获取数据一无所知 - 它已经从控制器获取了数据。

视图应负责通过Web向用户显示数据,而不是直接获取数据或对其进行操作。

除此之外,你可以这样做:

使用AJAX(即jQuery $ .ajax()方法)将查询作为字符串传递给Controller上的Action方法(使用HTTP POST或GET)。

让action方法使用Partial View返回弹出窗口的HTML。您也可以返回Json,但我认为在这种情况下HTML /部分视图会更容易。这是将执行OLE DB连接并执行查询的方法。

在你的$ .ajax()成功函数回调中,编写javascript,它将弹出一个新的对话框,其中包含控制器操作方法返回的部分视图HTML。

答案 1 :(得分:1)

您可以创建一个类来保存要显示的数据:

namespace sample {
    class viewList
    {
        public string field1 {get;set;}
        ...
    }
}

并创建一个列表以将结果保存在控制器中:

List<viewList> theList = new List<viewList>();

//Populate dbread here...

while (dbread.Read())
{    
    viewList listData = new viewList();
    listData.field1 = (dataType)dbread[0]; //Convert to your data type
    theList.Add(listData);
}

并将其传递给视图:

return view(theList);

然后在您的模型中(模型类型viewList)将结果显示在表格中:

@model sample.viewList

<table>
    @foreach (var item in Model)
    {
        <tr>
            <td>@item.field1</td>
        </tr>
    }
</table>

<强> ALTERNATIVE

要在弹出窗口中显示,请将列表放入ViewBag中,如下所示:

List<viewList> theList = new List<viewList>();

//Populate dbread here...

while (dbread.Read())
{    
    viewList listData = new viewList();
    listData.field1 = (dataType)dbread[0];
    theList.Add(listData);
}

ViewBag.Items = theList;

然后在你看来:

<script type="text/javascript">
    $(function() {
        var array = @Html.Raw(Json.Encode(ViewBag.Items));
        //Construct your table using the array here...
            alert(theConstructedTable);
    });
</script>