我是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视图而不是剃刀视图,但无论哪种方式我都无法传递参数 任何想法都赞赏
答案 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>