asp.net MVC3 C #: передача запроса в качестве параметра и отображение результата - PullRequest
1 голос
/ 17 декабря 2011

Я новичок в asp.net, C # и создании MVC-приложения на основе популярного приложения Music Store. У меня есть базовая навигация, и я достиг точки, где я рисую полную пробел. По сути, моя страница asp отображает запрос SQL (который сохраняется в базе данных SQL на том же компьютере)

Потребность: Мне нужно иметь кнопку рядом с этим запросом, который при нажатии соединяется с другой БД через OLEDB, запускает запрос и показывает результат во всплывающем окне.

Вопросы: Как передать запрос (который извлекается из БД) в качестве параметра к коду ниже и как сделать так, чтобы результаты появлялись в окне.

Не могли бы вы указать мне правильное направление. Приведенный ниже код взят со стандартной страницы asson 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);    

VIEW, который предоставляет этому контроллеру DATA, это запрос, который извлекается из моей БД SQL и должен выполняться в отдельной БД на отдельном сервере.

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

ВОПРОС: Как я должен использовать представление с именем 'DisplayResult', которое обрабатывает запрос, выбранный представлением выше, и выполняет его в другой БД. Я надеялся, что смогу использовать вид веб-формы, а не вид бритвы, но в любом случае я не могу передать параметр Любые идеи приветствуются

Ответы [ 2 ]

3 голосов
/ 17 декабря 2011

Смысл MVC состоит в том, чтобы перемещать соединения данных из представления (страница aspx) в контроллер.

Прочтите еще несколько уроков MVC и купите одну или две книги.Вы должны на самом деле заполнить данные в viewmodel на контроллере, а затем передать эту viewmodel в представление.Таким образом, представление ничего не знает о том, как получить данные - оно уже получило их от контроллера.

Представления должны нести ответственность за отображение данных пользователям через Интернет, а не за получение данных или манипулирование ими.непосредственно.

Если оставить это в стороне, вот как вы это сделаете:

Передача запроса в виде строки в метод действия на контроллере (с использованием HTTP POST или GET) с использованием AJAX (т.е..ajax () метод).

Пусть метод действия вернет HTML для вашего всплывающего окна, используя частичное представление.Вы также можете вернуть Json, но я думаю, что HTML / частичное представление будет проще в этом случае.Это метод, который будет выполнять подключение OLE DB и выполнять запрос.

В обратном вызове функции успеха $ .ajax () напишите javascript, который откроет новое диалоговое окно с частичным представлением HTML, которое было возвращено методом действия контроллера.

1 голос
/ 17 декабря 2011

Вы можете создать класс для хранения данных, которые вы хотите отобразить:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...