В моем основном (MyProfile) представлении содержатся ссылки, которые, когда пользователь нажимает на ссылку, загружает частичный вид в div с существующими данными из БД, которые могут быть обновлены пользователем.MVC4 загружает данные в частичные виды
@Ajax.ActionLink("Update 1", "Update1", new { email = @ViewBag.Email }, new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "divCurrentView", InsertionMode = InsertionMode.Replace })
@Ajax.ActionLink("Update 2", "Update2", new { email = @ViewBag.Email }, new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "divCurrentView", InsertionMode = InsertionMode.Replace })
<div id="divCurrentView">
</div>
Частичные Просмотров: пример:
_Update1:
@model ViewModels.Update1
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.id)
@Html.LabelFor(model => model.Name)
@Html.TextBoxFor(model => model.Name)
<input type="submit" value="Update" />
}
_Update2:
@model ViewModels.Update2
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.id)
@Html.LabelFor(model => model.Website)
@Html.TextBoxFor(model => model.Website)
<input type="submit" value="Update" />
}
В контроллере:
public PartialViewResult Update1(string email)
{
var model = populate the viewmodel
return PartialView("_Update1",model);
}
public PartialViewResult Update2(string email)
{
var model = populate the viewmodel
return PartialView("_Update2",model);
}
Это не значит, что пользователь будет нажимать на все ссылки при доступе к главному виду.
Я хочу получить обратную связь, если мой путь верен ИЛИ должен ли я загружать все данные один раз, когда пользователь добирается до представления MyProfile и сохраняет данные в сеансе, и когда каждое частичное представление загружается, данные загружаются из сеанса? Это позволит избежать вызова db каждый раз, когда загружается partilaview или есть лучший подход?
Спасибо,
UPDATE:
Я пытался использовать кэш, как это предлагается, но проблема данных магазина во всем мире. Если несколько пользователей войдут в систему и попытаются просмотреть/обновить данные, данные будут одинаковыми для всех из них. Я что-то пропустил?
Это то, что пробовал:
public PartialViewResult Update1(string email)
{
var cc = HttpRuntime.Cache.Get("cinfo");
Update1VM model = null;
if (cc == null)
{
model = populate the viewmodel
HttpRuntime.Cache.Insert("cinfo", model);
}
else
{
model = (Update1VM)cc;
}
return PartialView("_Update1", model);
}
Зависит от того, сколько данных мы говорим о хранении в сессии. Если это не так много, уверен, что это работает. Если нет, вы, вероятно, захотите не хранить его в сеансе. – Gjohn
сколько данных много? У меня около 20 полей. – Ben
всегда будет оставаться 20 полями? Будет ли это когда-нибудь изменяться? Помните, что когда-нибудь вас там не будет, и кому-то еще придется иметь дело с тем, что вы создали. Лично я никогда не был большим поклонником хранения вещей в сеансе просто потому, что поездка туда и обратно не нужна. Ниже приведена рекомендация py3rstr при обслуживании данных, когда это необходимо, а не всегда загружать все. – Gjohn