我有以下情况,目前我从外部服务(我无法控制)检索整个人,包括他们的地址。我只想显示地址的一个实例,然后有一个模型,以便在需要时显示其余部分。目前我传递了这个想法,然后再对外部服务进行查找,但是因为我已经有了数据,所以效率很低。
任何人都可以帮助制定好的策略,这是传输地址列表的最佳方式吗?
注意我以简化形式重新输入了代码,因此请忽略任何拼写错误
模型
public class PersonModel
{
Public int Id {get;set}
Public String Name {get; set;}
Public IEnumerable Address {get; set;}
// Single Address from the collection
Public DisplayAddress {get;set;}
}
public class AddressesViewModel
{
public IEnumerable<Address> Address { get; set; }
}
视图
@model PersonModel
<span>@Model.Name</span>
<ol>
@if (Model.DisplayAddress != null)
{
<li>@Model.DisplayAddress.Line1</li>
<li>@Model.DisplayAddress.Line2</li>
<li>@Model.DisplayAddress.Line3 </li>
<li>@Model.DisplayAddress.Town</li>
<li>@Model.DisplayAddress.County</li>
<li>@Model.DisplayAddress.PostalCode</li>
<li>@Model.DisplayAddress.Country</li>
}
</ol>
<a id="showalladdresses" title="View all addresses" href="#">View All Addressess</a>
@section scripts {
<script type="text/javascript">
$(function () {
$('#Modal').dialog({
autoOpen: false,
height: 600,
width: 800,
resizable: false,
modal: true
});
$('#showalladdresses').click(function () {
$('#Modal').load("@Url.Action("ViewAddresses", new { id = Model.Id })", function () {
$(this).dialog('open');
});
return false;
});
});
}
控制器
public ActionResult PersonBanner(long? Id)
{
if (!Id.HasValue)
return RedirectToAction("Index", "HomeController");
var result = new PersonModel();
result = unitOfWork.GetPersonSummaryDetails(Id.Value)
return View(result);
}
public ActionResult ViewAddresses(long Id)
{
var model = new AddressesViewModel
{
Address = unitOfWork.GetAddressesById(Id);
};
if (Request.IsAjaxRequest())
return PartialView(model);
return View(model);
}
答案 0 :(得分:0)
可以再次获取数据。只需将PatientSummaryDetails放入缓存中即可。
答案 1 :(得分:0)
然而,由于我已经掌握了数据,因此效率很低。
不,你还没有。据我了解,PersonBanner
和ViewAddresses
是两个单独的HTTP请求:一个是页面请求,另一个是通过AJAX。您的Web应用程序是无状态的,因此在每次请求时都需要加载所需的所有数据。
如果您发现确实需要性能,您可以在UI和服务之间引入一个缓存层,该缓存层将在第一次请求时缓存PersonModel
并从缓存中返回在随后的请求。缓存有时会出现围绕数据陈旧性的问题,因此只有在需要时才进行探讨。