У меня есть веб-приложение 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>();
}