2011-12-17 82 views
1

我是新來asp.net,C#和建立基於流行的音樂商店應用程序的MVC應用程序。 我準備好了我的基本導航,並且已經達到了繪製完整空白的程度。基本上,我的ASP頁面顯示一個SQL查詢(保存在SQL數據庫同一臺機器上)asp.net MVC3 C#:查詢傳遞作爲參數,並顯示結果

極品: 我需要旁邊有此查詢點擊它時,一個按鈕,通過OLEDB連接到另一個數據庫,並運行查詢並在彈出窗口中顯示結果。

問題: 如何將查詢(從數據庫中提取)作爲參數傳遞給下面的代碼,以及如何使結果在窗口中彈出。

能否請您指出我在正確方向。下面的代碼來自一個standalonson 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);  

視圖,其提供該位指示了數據,這是查詢是從我的SQL數據庫取出,並應在單獨的服務器上執行到一個單獨的數據庫。

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

問題: 我應該如何使用一個命名視圖「DisplayResult」同時處理由鑑於上述獲取的查詢和執行它agaisnt另一個數據庫。 我希望我可以用一個WebForm視圖,而不是剃刀的看法,但無論哪種方式,我不能夠傳遞參數 任何想法表示讚賞

+1

此頁似乎不是MVC。 MVC不使用腳本runat,也不使用Page_Load或Response.Write。您可能正在編寫一個MVC應用程序,但您的問題沒有MVC方面。 – 2011-12-17 00:44:31

+0

更正這不是MVC,我只是測試與此頁面的數據庫連接。我在這裏粘貼了這段代碼,給出了我想要做的事情的一個想法,這不會在MVC應用中發揮作用。 – user1102621 2011-12-17 05:03:23

回答

3

MVC的一點是移動數據連接出來的視圖(aspx頁面)和控制器。

閱讀一些MVC教程,買一兩本書。實際上,您應該將數據填充到控制器的視圖模型中,然後將該視圖模型傳遞給視圖。這樣,視圖就不知道如何獲取數據 - 它已經從控制器獲得了。

意見應該在Web上顯示的數據用戶,而不是獲取數據,或直接操縱它的責任。

隨着的是,除了,這裏是你會怎麼做:

使用AJAX(使用HTTP POST或GET)傳遞查詢作爲字符串的操作方法上的控制器(即jQuery的$。阿賈克斯()方法)。

有操作方法返回HTML爲您彈出窗口,使用局部視圖。你也可以返回Json,但我認爲在這種情況下HTML/partial視圖會更容易。這是將執行您的OLE DB連接並執行查詢的方法。

在$阿賈克斯()成功回調函數,寫javascript,將彈出與由控制器的操作方法返回的局部視圖HTML一個新的對話框。

+0

謝謝我能夠通過使用.........'@ Html.ActionLink(ShowColumns.Column_Name,「BrowseQueries」,新{ColumnIs = ShowColumns.Column_Name})'將參數傳遞給控制器​​... .........最後待決的部分或難題是如何在另一個視圖中捕獲此查詢,並使其針對單獨的數據庫服務器運行 – user1102621 2011-12-21 23:50:21

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的)在TA顯示您的結果BLE:

@model sample.viewList 

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

備選

要在彈出顯示,放列表進入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>