Я пытаюсь преобразовать это приложение веб-формы в мое приложение MVC, полный новичок здесь - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь преобразовать это приложение Webform в приложение MVC

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

Я новичок

Вот веб-форма:

protected void btnPrintToken_Click(object sender, EventArgs e)
{
        Queue<int> tokenQueue = (Queue<int>)Session["TokenQueue"];
        lblStatus.Text = "There are" + tokenQueue.Count.ToString()+
        " customers before you in the queue;

        if (Session["LastTokenNumberIssued"] == null)
            Session["LastTokenNumberIssued"] = 0;
        }
        int nextTokenNumberTobeIssued = (int)Session["LastTokenNumberIssued"] + 1;
        Session["LastTokenNumberIssued"] = nextTokenNumberTobeIssued;
        tokenQueue.Enqueue(nextTokenNumberTobeIssued);
        foreach(int token in tokenQueue)
        listTokens.Item.Clear();
        {
            listTokens.Items.Add(token.ToString());
        }
}

Вот мое приложение MVC:

    public ActionResult PrintToken()
    {
        Queue<int> tokenQueue = (Queue<int>)Session["TokenQueue"];

        if (Session["LastTokenNumberIssued"] == null)
        {
            Session["LastTokenNumberIssued"] = 0;
        }

        int nextTokenNumberTobeIssued = (int)Session["LastTokenNumberIssued"] + 1;
        Session["LastTokenNumberIssued"] = nextTokenNumberTobeIssued;

        tokenQueue.Enqueue(nextTokenNumberTobeIssued);

        foreach(int token in tokenQueue)
        {
            listTokens.Items.Add(token.ToString());
        }

        return View();
    }

У него почти такой же вид, но я не знаю, как получить доступ к своему виду в MVC, какв веб-формах, таких как "lblStatus.Txt"

Ответы [ 3 ]

2 голосов
/ 09 мая 2019

С MVC вы напрямую не взаимодействуете с элементами HTML, вместо этого предоставляете модель представления (в качестве альтернативы вы можете использовать ViewBag ) и использовать Razor синтаксис для динамической визуализации представления.

Вот шаги, необходимые для добавления модели представления в ваше действие PrintToken() и визуализации вашего сообщения:

Шаг 1) Создайте модель представления, которая представляет все динамические значения, которые вы хотите отобразить в представлении:

public class SampleViewModel
{
  public string StatusMessage { get; set; }
}

Шаг 2) Создайте экземпляр вашей модели представления, заполните ваши свойства и вернитесь с видом:

public ActionResult PrintToken()
{
    // Create instance of your view model
    var viewModel = new SampleViewModel();

    // Somewhere within your code set the StatusMessage
    viewModel.StatusMessage =  $"There are {tokenQueue.Count.ToString()} customers before you in the queue";

    // Return the view model with the view
    return View(viewModel);
}

Шаг 3) Укажите модель представления в вашем представлении, а затем отобразите свойство:

<!-- Declare the model on the very top (first line) of your view -->
<!-- Note: This should be the full path including namespace -->
@model SampleViewModel

<!-- Render the property from the view-->
<p>@Model.StatusMessage</p>
1 голос
/ 09 мая 2019

Вы можете использовать ViewBag или ViewData для хранения сообщения как ваше требование

public ActionResult PrintToken()
    {
        Queue<int> tokenQueue = (Queue<int>)Session["TokenQueue"];

       ViewBag.StatusText = "There are" + tokenQueue.Count.ToString()+
        " customers before you in the queue;

        if (Session["LastTokenNumberIssued"] == null)
        {
            Session["LastTokenNumberIssued"] = 0;
        }

        int nextTokenNumberTobeIssued = (int)Session["LastTokenNumberIssued"] + 1;
        Session["LastTokenNumberIssued"] = nextTokenNumberTobeIssued;

        tokenQueue.Enqueue(nextTokenNumberTobeIssued);

        foreach(int token in tokenQueue)
        {
            listTokens.Items.Add(token.ToString());
        }

        return View();
    }

В вашем файле cshtml

<label>@ViewBag.StatusText</label>

Вы также можете создать свою ViewModel как

class PrintTokenViewModel{
     public List<string> listTokens{get;set;}
     public string StatusText{get;set;}
}

Другое решение: используйте ViewModel для хранения данных

В контроллере

public ActionResult PrintToken()
 {
     var model = new PrintTokenViewModel();
     //handle assign here
     return View(model);
}

In View cshtml

@model PrintTokenViewModel

<ul>
@foreach(var item in Model.ListTokens){
   <li>@item</li>
}
</ul>

<label>@Model.StatusText</label>
0 голосов
/ 09 мая 2019

вы можете сохранить данные в ViewModel и передать их для просмотра через контроллер, как указано ниже

public ActionResult PrintToken()
{
      PrintViewModel print = new PrintViewModel();

    return View(print);
}

PrintToken.cshtml
@model  SampleMVC.Models.PrintViewModel
@{
    ViewBag.Title = "PrintToken";
}

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