Priya-Kiko Ответов: 2

Как вызвать метод, присутствующий в viewmodel из представления в ASP.NET ядро MVC


Им просто научиться знакомиться, чтобы .объем сердечника. Прямо сейчас опробую небольшое приложение в asp.net core, MVC ver. 3.1.3.

Из метода действия Maincontroller вызывается представление :

public ViewResult mainMenu()
{
    MenuInfoModel menuInfoModel = new MenuInfoModel(); 
        return View("smnu",menuInfoModel);
}


ViewModel для представления является :

public class MenuInfoModel
    {   
        public String getLicensedName()
        {
            return "Natasha Park";
        }
    }


Содержимое представления(smnu.cshtml) :

@model  LS.Models.ViewModels.MenuInfoModel    
@{
    ViewBag.Title = "LS - System";
}
<div Id="license">Licensed To : </div>
@section Scripts
{
    <script>
        $('#license').text("Licensed To : " + @Model.getLicensedName());
    </script>
}


Файл _Layout-это :

<!DOCTYPE html>

<html lang="en">
<head>
    <meta name="viewport" content="width=device-width" initial-scale=1 charset="utf-8" />
    <link href="~/lib/twitter-bootstrap/css/bootstrap.css" rel="stylesheet" />
    <script src="~/lib/jquery/jquery.js"></script>
    <script src="~/lib/twitter-bootstrap/js/bootstrap.js"></script>
    <title>@ViewBag.Title</title>
</head>
<body>
    <div>
        @RenderBody()
    </div>
</body>
@if (IsSectionDefined("Scripts"))
{
    @RenderSection("Scripts", required: true)
}
</html>


В _ViewStart я назначил файл макета "Layout"

Моя проблема заключается в следующем :

Текст лицензии не меняется. Здесь нет никаких ошибок. Если я изменю текст непосредственно в скрипте.. это происходит, но не через возвращаемое значение из ViewModel. Как сделать так, чтобы это изменение вступило в силу.

Пожалуйста помочь.

Заранее спасибо.

Что я уже пробовал:

Попробовал вложить строку в скрипт сразу же, как она работает.

#realJSOP

поместите точку останова в свой метод viewmodel, чтобы увидеть, добирается ли он вообще туда.

2 Ответов

Рейтинг:
1

Richard Deeming

Цитата:
Здесь нет никаких ошибок.
Я был бы удивлен, если бы это было так!

Проверьте консоль разработчика Вашего браузера, и вы увидите, что у вас есть синтаксическая ошибка в визуализированном Javascript:
$('#license').text("Licensed To : " + Natasha Park);
У вас есть строковый литерал без кавычек, который не является допустимым Javascript.

Если вы хотите передать строковую переменную с сервера в ваш Javascript, вам нужно правильно ее закодировать. К счастью, это довольно легко сделать в ASP.NET сердечник:
@section Scripts
{
    <script>
        $('#license').text("Licensed To : " + @Json.Serialize(Model.getLicensedName()));
    </script>
}
Это должно вывести:
$('#license').text("Licensed To : " + "Natasha Park");
что не должно приводить к каким-либо ошибкам на стороне клиента.

Но, как было сказано в решении 1, Вам не нужно использовать Javascript для вывода значений сайта сервера в вашей разметке. Просто выведите значение непосредственно там, где вы хотите, чтобы оно появилось:
<div id="license">Licensed To : @Model.getLicensedName()</div>
ASP.NET убедитесь, что значение правильно закодировано в HTML, так что вы не получите никаких неприятных сюрпризов, если возвращаемое значение содержит "специальные" символы.

Кроме того, как уже упоминалось в решении 1, в .NET предпочтительнее использовать свойства вместо методов getter и setter Java.
Свойства - Руководство По Программированию На C# | Microsoft Docs[^]


Maciej Los

5ed!

Рейтинг:
1

Member 9853265

Вы пытаетесь использовать метод, чтобы показать имя лицензии, а не свойство. Попробуй:

публичный класс MenuInfoModel
{
публичная строка LicensedName { get; set; }
}

с:

public ViewResult mainMenu()
{
MenuInfoModel menuInfoModel = новый MenuInfoModel();
менуинфомодель.LicenceName = "Наташа Парк";
обратный вид("smnu",menuInfoModel);
}

и измените свой взгляд на:

@модели LS.Модели.модель представления.Менуинфомодель
@{
Видовой мешок.Title = "LS - система";
}
<div>лицензия на : @Model.Имя лицензии</div>

MVC заменит @Model.Имя лицензии с именем, содержащимся в модели. Нет никакой необходимости использовать JQuery! Вы также можете использовать:

<div>
<label>лицензия на : </label>
@Html.Display("Имя Лицензии")
</div>