В настоящее время я пытаюсь создать веб-сайт на основе XML, который имеет доступ к URL-адресу фида. XML-канал запрашивается путем добавления параметров url к текущему URL-адресу, поэтому я использую форму с методом GET для добавления параметров в URL-адрес.ASP.Net MVC - Передача данных между представлениями
Я в настоящее время имеют форму поиска собственности, которая будет искать свойств в корм путем добавления параметров XML в URL, как так:
/Продажа/minprice = 300000 & maxprice = +500000
Это работает отлично, и пользователю отображаются правильные результаты. Однако, если бы я использовал форму фильтра, которая, например, отфильтровала эти свойства по максимальной цене, параметры подачи будут удалены при отправке формы фильтра. Новый URL после фильтра будет, например:
/Продажа/priceSort = убыванию
Как вы можете видеть, minprice и maxprice поля были полностью удалены, оставив меня с нежелательными свойствами?.
В настоящее время для борьбы с этим я использую сеансы для хранения URL-адресов для каждой страницы, а затем их объединения для создания 1-го URL-адреса. Я понимаю, что использование сессий в приложениях на базе MVC не рекомендуется.
Итак, мне действительно интересно, есть ли лучший способ хранить URL, а не использовать сеансы?
Любая помощь будет высоко оценена.
Заранее спасибо.
НЕКОТОРЫХ фрагментам кода сайта:
модели и ViewModel
public class ResultsViewModel
{
public PropertyResult[] Property { get; set; }
}
public class PropertyResult
{
public int Count { get; set; }
public int Pid { get; set; }
public int RentalPeriod { get; set; }
public string Price { get; set; }
public string Address { get; set; }
public string NameNumber { get; set; }
public string SA1 { get; set; }
public string SA2 { get; set; }
public string Town { get; set; }
public string City { get; set; }
public string County { get; set; }
public string Postcode { get; set; }
public string LocationCode { get; set; }
public string PriceText { get; set; }
public string Primary1 { get; set; }
public string Secondary1 { get; set; }
public string Secondary2 { get; set; }
public string Description { get; set; }
public string Period { get; set; }
public int Bedrooms { get; set; }
public int Receptions { get; set; }
public int Bathrooms { get; set; }
public int Garages { get; set; }
public int Gardens { get; set; }
public bool Featured { get; set; }
public int Views { get; set; }
}
Контроллер
try
{
var xml = XElement.Load(resultsFeed);
var query = (from props in xml.Descendants("property")
select new PropertyResult
{
// property id
Pid = Convert.ToInt32(props.Attribute("id").Value),
// Rooms Count
Bedrooms = Convert.ToInt32(props.Attribute("bedrooms").Value),
Receptions = Convert.ToInt32(props.Attribute("receptions").Value),
Bathrooms = Convert.ToInt32(props.Attribute("bathrooms").Value),
Gardens = Convert.ToInt32(props.Attribute("gardens").Value),
Garages = Convert.ToInt32(props.Attribute("garages").Value),
// 1 = sales prop, 4 = lettings prop
RentalPeriod = Convert.ToInt32(props.Attribute("rentalperiod").Value),
Period = props.Attribute("period").Value,
// address
Address = props.Element("useAddress").Value,
NameNumber = props.Element("num").Value,
SA1 = props.Element("sa1").Value,
SA2 = props.Element("sa2").Value,
Town = props.Element("town").Value,
City = props.Element("city").Value,
County = props.Element("county").Value,
Postcode = props.Element("postcode").Value,
// location code
LocationCode = props.Element("locationcodes").Value,
Featured = Convert.ToBoolean(props.Attribute("featured").Value),
// description
Description = props.Element("summaryDescription").Value,
// price
Price = props.Attribute("price").Value,
PriceText = props.Element("pricetext").Value,
// images
Primary1 = "http://lb.dezrez.com/Imaging/PictureResizer.ASP?Position=1&AgentId=" + eaid + "&BranchId="+ bid + "&width=1000&Category=Primary&PropertyId=",
Secondary1 = "http://www.dezrez.com/estate-agent-software/ImageResizeHandler.do?&photoID=2&AgentID=1239&BranchID=1976&Width=1000&PropertyId=",
Secondary2 = "http://www.dezrez.com/estate-agent-software/ImageResizeHandler.do?&photoID=3&AgentID=1239&BranchID=1976&Width=1000&PropertyId=",
}).ToArray();
Посмотреть
Я в настоящее время доступа к каждому узлу так:
@Model.Property[i].Gardens
Действительно, MVC не хранит никаких параметров, все должно быть отправлено каждый раз или храниться внутри. Большое отличие от Web-форм ASP.NET. – RealityDysfunction
Спасибо за ваши комментарии, очень ценится. Так что, возможно, лучший вариант - иметь еще один ViewModel, который имеет все параметры фильтрации и поиска в качестве свойств. Я мог бы затем присвоить значения этим свойствам через класс querystring? Я прав, или я смущаюсь. В настоящий момент я довольно дилетантский, поэтому любая помощь будет отличной. Спасибо –
Нет, ваш контроллер должен иметь параметр ViewModel в качестве параметра. Структура будет обрабатывать преобразование/сопоставление значений строки запроса в свойствах ViewModel. Используете ли вы MVC так, как он был разработан, вы получаете преимущества :) – Romias