2016-08-11 4 views
0

Добрый день! Я пытаюсь отобразить результат запроса хранимой процедуры в текстовое поле на моей странице. Эта хранимая процедура возвращает только один результат, который является ежедневной продажей. Я пытаюсь сделать это через JSonresult, чтобы передать его на ajax на моей странице просмотра. Но мне не удавалось это передать.Передача результатов запроса сохраненной процедуры от JSonResult до Ajax

У меня есть таблица с именем ORDER, который имеет ORDER_DATE & NET_AMOUNT колонку. Мне нужно отобразить сумму net_amount за текущий день. Вот мой запрос:

SELECT SUM(NET_AMOUNT) AS DAILY_SALES 
 
FROM [ORDER] 
 
WHERE ORDER_DATE = GETDATE()

Я затем вызвать эту хранимую процедуру в моем контроллере с помощью этого метода:

 public JsonResult GetSalesToday() 
 
     { 
 
      DataTable dtTable = new DataTable(); 
 
      List<string> lstSales = new List<string>(); 
 

 

 
      string strQuery = "SP_DAILY_SALES"; 
 

 
      SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString()); 
 
      SqlCommand cmd = new SqlCommand(strQuery, con); 
 
      cmd.CommandType = CommandType.StoredProcedure; 
 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
 
      da.Fill(dtTable); 
 

 

 
      foreach (DataRow row in dtTable.Rows) 
 
      { 
 
       lstSales.Add(row["DAILY_SALES"].ToString()); 
 
      } 
 

 

 
      var DailySales = new 
 
      { 
 
       SALESTODAY = lstSales 
 
      }; 
 

 

 
      return Json(DailySales, JsonRequestBehavior.AllowGet); 
 

 
     } \t \t

и затем вызвать его к мой взгляд следующим образом:

$.ajax(
 
         { 
 
          datatype: "json", 
 
          type: "POST", 
 
          url: "/Sales/GetSalesToday", 
 
          data: JSON, 
 
          success: function (data) { 
 
           DailySales(data); 
 
          }, 
 
          error: function() { alert("Error"); } 
 
         });

Как назвать это тогда мой текстовое поле?

<div class="form-group"> 
 
           @Html.LabelFor("DailySales", "Sales", htmlAttributes: new { @class = "col-xs-4 col-sm-offset-1 col-sm-4" }) 
 
           <div class="col-lg-6 col-lg-6 col-md-6 col-md-6 col-sm-6 col-sm-6 col-xs-6 col-xs-6"> 
 
            @Html.TextBoxFor("DailySales", new { @class = "form-control" }) 
 
            @Html.ValidationMessageFor("DailySales", "", new { @class = "text-danger" }) 
 
           </div> 
 
          </div>

Где я буду неправильно? Может ли кто-нибудь помочь мне в этом? Заранее спасибо!

+0

Что делает ваш SP_DAILY_SALES SP возвращается? Какова ценность в DailySales? – Shyju

+0

Что делает функция 'DailySales (data);' do? – JamieD77

+0

@Shyju возвращает SUM (NET_AMOUNT) как DAILY_SALES, который затем перехожу к lstSales.Я создал var DailySales и назначил lstSales другой переменной, которая является SALESTODAY. DailySales - это то, что я передаю ajax на мой взгляд. –

ответ

1

Если вы хотите получить сумму, просто сохраните переменную для этого и верните это.

decimal total = 0.0M; 

foreach (DataRow row in dtTable.Rows) 
{ 
    total += Convert.ToInt32(row["DAILY_SALES"]); 
} 

return Json(total,JsonRequestBehaviour.AllowGet); 

и вызова успеха вашего АЯКС позвонить обратно, прочитать значение и присвоить текстовое поле с помощью JQuery val() метода.

success: function (data){ 
          $("#DailySales").val(data); 
         }, 

Если ваша хранимая процедура возвращает одно скалярное значение, вам не нужно прокручивать строку данных! Вы также можете использовать метод ExecuteScalar. Также я изменил свой метод на использование using, чтобы соединения были закрыты должным образом.

Предполагая, что ваша хранимая процедура возвращает одно десятичное значение.

public JsonResult GetSalesToday() 
{ 
    var strQuery = "SP_DAILY_SALES"; 
    decimal total = 0.0M; 

    var conStr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString(); 

    using (var con = new SqlConnection(conStr))) 
    { 
     using (var cmd = new SqlCommand(strQuery, con)) 
     { 
      con.Open(); 
      cmd.CommandType = CommandType.StoredProcedure; 
      total = (decimal)cmd.ExecuteScalar(); 
     } 
    } 

    return Json(total, JsonRequestBehavior.AllowGet); 
} 

Кроме того, я вижу, у вас есть неправильный код на ваш взгляд. TextBoxFor и LabelFor Вспомогательные методы не принимают строку в качестве аргумента. Вы должны использовать Html.TextBox и Html.Label метод

@Html.Label("DailySales", "Sales",new { @class = "col-xs-4 col-sm-offset-1 col-sm-4" }) 
@Html.TextBox("DailySales", new { @class = "form-control" }) 
+0

Привет @Shyju возвращает ошибку в этой строке ** total + = Convert.ToInt32 (строка ["DAILY_SALES"]); ** 1-я ошибка: **; ожидаемый **, который указывает на ** Конвертировать ** и вторую ошибку: ** Недопустимый термин выражения '=' **, указывающий на это ** = ** –

+0

@KylieIrwin Извините! Дополнительное пространство! Исправлено. Этот код должен работать нормально. – Shyju

+0

Ошибки исчезли. Просто ошибка с тем, как я называю это в этом ** @ Html.LabelFor («DailySales», «Sales») ** –

1
`decimal total = 0.0; 
foreach (DataRow row in dtTable.Rows) 
{ 
    lstSales.Add(row["DAILY_SALES"].ToString()); 
    total = total + Convert.ToInt32(row["DAILY_SALES"]); 
} 
return Json(total,JsonRequestBehaviour.AllowGet);` 
+0

@Kylie Irwin вы можете попробовать это –

+0

я сделал. Он возвращает эту ошибку: ** Ошибка «int» не содержит определения для «M», и не может быть найден метод расширения «M», принимающий первый аргумент типа «int» (вам не хватает директивы using или ссылка на сборку?) ** –

+0

Теперь это прекрасно. Просто ошибка с тем, как я называю это в этом ** @ Html.LabelFor («DailySales», «Sales») ** –

Смежные вопросы