0

次のシナリオがあります。現時点では、アドレスを含む人全体を外部サービスから取得しています (これは制御できません)。住所のインスタンスを 1 つだけ表示し、必要に応じて残りを表示するモデルを用意します。現時点では、アイデアを渡し、外部サービスに別のルックアップを行いますが、既にデータを持っているため、これは非効率的です。

アドレスのリストを送信するための最良の方法であるために、誰でも良い戦略を手伝ってもらえますか?

NB コードを簡略化して再入力したので、タイプミスは無視してください

モデル

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);
    }
4

2 に答える 2

0

データを再度取得しても問題ありません。PatientSummaryDetails をキャッシュに入れるだけです。

于 2013-02-15T14:26:33.257 に答える
0

ただし、既にデータがあるため、これは非効率的です。

いいえ、まだ持っていません。私が理解しているように、PersonBanner2ViewAddressesつの別個の HTTP リクエストです。1 つはページ リクエスト、もう 1 つは AJAX 経由です。Web アプリケーションはステートレスであるため、リクエストごとに必要なすべてのデータをロードする必要があります。

パフォーマンスが本当に必要であることがわかった場合は、UI とサービスの間にキャッシュ レイヤーを導入して、PersonModel最初のリクエストでキャッシュし、後続のリクエストでキャッシュから返すことができます。キャッシュは、データの古さに関する問題を引き起こす場合があるため、必要な場合にのみ調査してください。

于 2013-02-15T14:27:32.430 に答える