Метод вызова DotNet Core с помощью экранной кнопки - PullRequest
0 голосов
/ 14 ноября 2018

В моем приложении DotNet Core у меня есть кнопка, настроенная с использованием некоторого javascript для моего события OnClick. Это выглядит так:

<div>
    @(Html.DevExtreme().Button()
                             .Text("Press me")
                             .Type(ButtonType.Normal)
                             .Width(90)
                             .OnClick("notify")
    )
</div>

<script>
     function notify() {
        console.log("pressed");

       // ModifiedDuration.AdjustmentScreen_Netting.Csharp.RunBatch();
      //  var a = '<%=RunBatch()%>';
    }
</script>

Закомментированные строки - это то, что я пытался назвать своим целевым методом, но ни один из них не сработал. Основной метод, который я хочу вызвать, таков:

public void RunBatch()
{
    Console.WriteLine("Re-running batch");
    TestOutput print= new TestOutput ();
    print.TestMethod();
 }

Тогда, что TestMethod делает:

public void ProcessAdjustedBatch()
{
    Console.WriteLine("I have been called from the datagrid!!!!");
}

Таким образом, после нажатия кнопки я ожидаю увидеть следующие сообщения журнала:

  • прессованные
  • повторная партия
  • Меня вызвали из таблицы данных !!!!

Но все, что я вижу, это Pressed в моем журнале разработчиков. Как мне достичь желаемого результата?

1 Ответ

0 голосов
/ 15 ноября 2018

Console.WriteLine() никогда не будет отображаться в браузере клиента, поскольку он запускается на стороне сервера и открывается в окне консоли сервера.Необходимо использовать Debug.WriteLine(), если вы хотите видеть сообщения отладки в окне немедленного вывода.

Также обратите внимание, что var a = '<%=RunBatch()%>' выполняется только внутри страниц ASPX, его нельзя выполнить в Razorкоторый использует @{ ... } для сегмента кода, и оба метода отладки являются серверными методами.

Если вы хотите отобразить отладочное сообщение на стороне сервера в консоли браузера с помощью console.log(), вам нужно создать действие контроллераон выполняет оба метода с возвращаемым типом string, а затем использует AJAX внутри функции notify(), которая выводит результат в части success.

Вот простой пример:

Действие контроллера

public IActionResult GetMessages()
{
    var messages = new StringBuilder();

    messages.Append(RunBatch());
    messages.Append("\n"); // use newline to separate messages from different methods
    messages.Append(ProcessAdjustedBatch());

    return Json(messages.ToString(), JsonRequestBehavior.AllowGet);
}

Методы отладки

public static string RunBatch()
{
    string batch = "Re-running batch";
    Debug.WriteLine(batch);

    TestOutput print = new TestOutput();
    print.TestMethod();

    return batch;
}

public static string ProcessAdjustedBatch()
{
    return "I have been called from the datagrid!!!!";
}

Представление (тег скрипта)

<script>
function notify() {
   console.log("pressed");

   $.ajax({
       type: 'GET',
       url: '@Url.Action("GetMessages", "ControllerName")',
       dataType: 'json',
       success: function (result) {
           console.log(result);
       }
   });
}
</script>

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

pressed
Re-running batch
I have been called from the datagrid!!!!

Пример в реальном времени: .NET Fiddle

Проблемы, связанные с данной:

Куда ведет Console.WriteLine в ASP.NET?

Asp.net mvc Console.WriteLineв браузер

Как использовать Console.WriteLine в ASP.Net MVC 3

...