Как отобразить строку в файл Layout.cs html? - PullRequest
3 голосов
/ 31 января 2020

У меня есть метод, который возвращает строку в HomeController.

public string MyLocation()
{
    return "NYC";
}

Я пытаюсь отобразить возвращенную строку в Nav Item моего _Layout.cshtml файла внутри тега <p>.

<li>
    <a href="#"> <p font-size:14px">  </p> </a>
</li>

Ответы [ 2 ]

3 голосов
/ 31 января 2020

Вы не можете отправить данные на _Layout page ie. (Master page).

Сохраните свое местоположение в переменной сеанса и получите доступ к нему на главной странице следующим образом:

public string MyLocation()
   {
    Session["MyLocation"]="NYC";
    return "NYC";
   }

и _Layout Страница будет выглядеть так:

     <li>
         <a    href="#"> 
            <p font-size:14px">  
                 @HttpContext.Current.Session["MyLocation"].ToString()   
            </p>
         </a> 
    </li>

Это может помочь вам.

2 голосов
/ 31 января 2020

Файл макета ничего не знает о представлениях (файлы .cs html), которые его используют, и представления также ничего не знают о файле макета, кроме его имени.

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

(1) Имеют _Layout.cs html, содержащие оператор @RenderBody(). Именно здесь будут отображаться выходные данные, сгенерированные представлениями.

(2) Пусть ваш файл View ссылается на файл макета по его имени, также желательно, чтобы он использовал Model класс и сделать его частичным HTML:

// file Views/Location/MyLocation.cshtml

@model YourProject.Models.Location   // See part (3) below

@{
    Layout = "_Layout";
}

<h2>My Location</h2>

<div>
    City: @(Model.City)
</div>

(3) Определить класс модели:

// file Models/Location.cs

namespace YourProject.Models
{
    public class Location
    {
        public string City { get; set; }
    }
}

(4) Сделайте так, чтобы Action-метод в Controller создал объект Model и отправил его в представление:

// file Controllers/LocationController.cs

namespace YourProject.Controllers
{
    public class LocationController : Controller
    {
        public IActionResult MyLocation()
        {
            var model = new Location { City = "NYC" };
            return View(model); // This will start MyLocation.cshtml and pass 'model' as a parameter into it
        }
    }
}

Подробнее здесь:


В качестве альтернативы вы можете использовать ViewBag. Затем вы можете опустить класс Location Model, но вы также потеряете все преимущества Intellisense и проверки правильности во время компиляции.

// file Views/Location/MyLocation.cshtml

@{
    Layout = "_Layout";
}

Location: @(ViewBag.Location) <i>(from ViewBag)</i>
// file Controllers/LocationController.cs

namespace YourProject.Controllers
{
    public class LocationController : Controller
    {
        public IActionResult MyLocation()
        {
            ViewBag.Location = "NYC";
            return View(); // This will start MyLocation.cshtml without a 'model'.
        }
    }
}

Вы можете использовать подход ViewBag, подход Model. или даже объединить их.

Вы также можете использовать ViewBag в файле _Layout, но тогда вам нужно убедиться, что каждый метод действия Controller предоставляет значение в ViewBag, поскольку оно не сохраняется между вызовами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...