Как передать 2 значения в MVC, используя логику «модель: данные»? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть JavaScript, который отправляет querystring на Controller:

window.location.href = "/Error/Index?message=" + data.responseJSON.Message; 

И у меня есть метод в контроллере, который принимает message в качестве параметра и отображает сообщениев представлении:

public ActionResult Index(string message)
{
    return View("Error", model: message);
}

Логика просмотра:

<strong>Application Error:</strong><br /> @Model

Как изменить логику, чтобы я мог отправить 2 параметра в строку запроса и отобразить их в представлении?

Нечто подобное:

JavaScript:

 window.location.href = "/Error/Index?message=" + data.responseJSON.Message + "&stackTrace" + data.responseJSON.StackTrace;

Контроллер:

public ActionResult Index(string errorMessage, string stackTrace)
{
    return View("Error", model: errorMessage);
}  

Вид:

<strong>Application Error:</strong><br /> @Model.errorMessage <br>
<span>@Model.stackTrace</span>

Есть лиэто способ сделать?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Не могли бы вы просто использовать ajax-вызов?

Что-то вроде:

function aFunction()
{
    var json = '{Message: ' + //MessageParam + ', StackTrace: ' + //StackParam + '}';
    $.ajax({
        url: '@Url.Action("//function", "//Controller")',
        type: 'POST',
        data: json,
        contentType: 'Application/json',
        success: function (result)
        {
            //Whatever you want to happen next
        }
    });

}
0 голосов
/ 08 июня 2018

Создание модели представления:

public class MyViewModel
{
    public string ErrorMessage { get; set; }
    public string StackTrace { get; set; }
}

Настройте представление для использования этой модели представления:

@model MyViewModel

<strong>Application Error:</strong><br /> @Model.ErrorMessage <br>
<span>@Model.StackTrace</span>

Затем отправьте экземпляр этой модели представления в ваше представление:

return View("Error", model: new MyViewModel { ErrorMessage = errorMessage, StackTrace = stackTrace });

Если вы не хотите создавать отдельный класс для этого, что-то вроде Tuple<string, string> будет работать так же хорошо, как модель представления, только с менее интуитивно понятными именами свойств.Любой тип может быть моделью представления.Вам просто нужно указать этот тип в объявлении @model в верхней части представления и передать экземпляр этого типа представлению.

Редактировать: Если вы хотите использоватьTuple<string, string> тогда настройка будет такой же, как у любого типа.Объявите и используйте тип в модели:

@model Tuple<string, string>

<strong>Application Error:</strong><br /> @Model.Item1 <br>
<span>@Model.Item2</span>

И передайте экземпляр этого типа модели:

return view("Error", model: new Tuple<string, string>(errorMessage, stackTrace));

Однако помните о неинтуитивном именовании.«Item1» и «Item2» на самом деле не передают никакой информации о том, что это за значения.

Примечание для OP и будущих читателей ... Использование string в качестве модели представления, вероятно, не очень хорошая идея.Перегрузка метода View() может привести к путанице при передаче строки, предназначенной для модели, но интерпретируемой, например, как имя представления.В общем случае лучше использовать пользовательские (или, по крайней мере, не примитивные) типы в качестве моделей представления.Даже если эти типы имеют или нуждаются только в одном свойстве.

...