Модель повторного использования MVC - PullRequest
0 голосов
/ 22 октября 2018

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

У меня была предыдущая проблема, из-за которой моя модель была статичной, поэтому данные отображались пользователям на других клиентах, а не были специфичными для каждого пользователя.Теперь я понял, что каждый отдельный пользователь может запрашивать и получать свой список адресов в представлении (которое не видно никому другому), однако, когда пользователь обновляет страницу или возвращается назад, данные теряются.

У меня есть некоторый код на обновлении страницы, который проверяет, есть ли данные, и не приведет пользователя к началу формы, однако при обновлении страницы модель возвращается к нулю, следовательно, она всегда будет приниматьвернуться к началу.

Есть идеи?В идеале я хочу иметь возможность использовать данные несколько раз для текущего пользователя, но если они обновятся и, скажем, через форму будут заполнены на 90%, они потеряют все данные.Кажется, это должно быть легко, но все примеры, которые я попробовал, не сработали для моего конкретного сценария.

Контроллер:

public class AssistedController : Controller
{
    // GET: Assisted
    AddressList model;


    public ActionResult Index()
    {
      return View(model);
    }

    [HttpPost]
    public ActionResult GetAddresses(string postcode)
    {
        model = new AddressList();
        if (postcode == null || postcode == "")
        {
            return RedirectToAction("/Index/");
        }
        //call enviroweb web service
        AddressWeb ew = new AddressWeb();
        //extract address values from the XML returned from web service
        XmlNode xml = ew.GetAddress(", , , , " + postcode);

        foreach (XmlElement addressInfo in xml)
        {
            foreach (XmlElement teset in addressInfo["Addresses"])
            {
                //add each address item found to the list
                model.listone.Add(new AddressResults {
                    FullAddress = teset["fulladdress"].InnerText,
                    Lat = teset["Lat"].InnerText,
                    Lon = teset["Long"].InnerText,
                    addLine1 = teset["addline1"].InnerText,
                    addLine2 = teset["addline2"].InnerText,
                    addLine3 = teset["addline3"].InnerText,
                    addLine4 = teset["addline4"].InnerText,
                    Town = teset["Town"].InnerText,
                    postcode = teset["postcode"].InnerText,
                    Ownership = teset["Ownership"].InnerText,
                    WeekNumber = teset["WeekNumber"].InnerText

                });
            }
        }

        //return the list and model back to the index view
        return View("Index", model);


    }

Представление:

<!--Use the model to return the data-->
@model AddressSearch.Models.AddressList
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}

@if (Model == null)
{

}
  else
{
if (Model.listone.Count != 0)
  {

//this section returns the items as options in the select if the list count is greater than 0.
foreach (var test in Model.listone)
 {
 <option value="@test.FullAddress">@test.FullAddress</option>
                                }



                            }
                        }

Модель:

public class AddressList
{
    public List<AddressResults> listone = new List<AddressResults>();
}

1 Ответ

0 голосов
/ 22 октября 2018

TempData в ASP.NET MVC может использоваться для хранения временных данных, которые можно использовать в последующем запросе.TempData будет очищен после завершения следующего запроса.

public class AssistedController : Controller
{
    // GET: Assisted
    AddressList model;


    public ActionResult Index()
    {
        if (TemData.ContainsKey("address"))
        {
            model = TempData["address"] as AddressList;
        }
        return View(model);
    }

    [HttpPost]
    public ActionResult GetAddresses(string postcode)
    {
        model = new AddressList();
        if (postcode == null || postcode == "")
        {
            return RedirectToAction("/Index/");
        }
        if (TemData.ContainsKey("address"))
        {
            model = TempData["address"] as AddressList;
            return View(model);
        }
        //call enviroweb web service
        AddressWeb ew = new AddressWeb();
        //extract address values from the XML returned from web service
        XmlNode xml = ew.GetAddress(", , , , " + postcode);

        foreach (XmlElement addressInfo in xml)
        {
            foreach (XmlElement teset in addressInfo["Addresses"])
            {
                //add each address item found to the list
                model.listone.Add(new AddressResults
                {
                    FullAddress = teset["fulladdress"].InnerText,
                    Lat = teset["Lat"].InnerText,
                    Lon = teset["Long"].InnerText,
                    addLine1 = teset["addline1"].InnerText,
                    addLine2 = teset["addline2"].InnerText,
                    addLine3 = teset["addline3"].InnerText,
                    addLine4 = teset["addline4"].InnerText,
                    Town = teset["Town"].InnerText,
                    postcode = teset["postcode"].InnerText,
                    Ownership = teset["Ownership"].InnerText,
                    WeekNumber = teset["WeekNumber"].InnerText

                });
            }
        }
        TempData["address"] = model;
        //return the list and model back to the index view
        return View("Index", model);
    }
}

См. эту ссылку , чтобы узнать, как использовать

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