-1

MVC 3.0 はまったく初めてで、WCF を使用して MVC 3.0 アプリケーションを作成するように依頼されました。既に WCF サービスを作成し、MVC アプリケーションも作成しました。サービスを MVC アプリケーションのビューにリンクする方法について、ちょっと疑問があります。TMReportController という名前のコントローラーを作成しました。ビュー BenchEmployee があります。ビューから入力を渡す必要があります。つまり、ドロップダウンの値をサービスに渡し、返されたデータセットをフェッチし、ビュー BenchEmployee に存在するグリッドにバインドする必要があります。私のビューは aspx ページではありません。誰かがこれを行う方法を説明してもらえますか? 前もって感謝します。

4

1 に答える 1

0

ASP.NET MVC アプリケーションは、WCF サービスのクライアントになります。したがって、最初のステップはサービス定義をインポートすることです。これにより、クライアントにプロキシ オブジェクトが作成されます。したがって、MVC アプリケーション内では、サービスで定義されている操作とデータ コントラクトを取得します。

あとは、ビューの要件を反映するビュー モデルを作成するだけです。

public class MyViewModel
{
    [Displayname("Select an item")]
    public string SelectedItemId { get; set; }
    public IEnumerable<SelectListItem> Items 
    { 
        get
        {
            new SelectListItem { Value = "1", Text = "item 1" },
            new SelectListItem { Value = "2", Text = "item 2" },
            new SelectListItem { Value = "3", Text = "item 3" },
        }
    }

    public IEnumerable<SomeType> Results { get; set; }
}

その後:

public class HomeController: Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel();
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        using (var client = new YourWebServiceClient())
        {
            model.Results = client.GetResults(model.SelectedItemId);
            return View(model);
        }
    }
}

そして最後に、対応する強く型付けされたビューを持つことができます:

@model MyViewModel
@using (Html.BeginForm())
{
    @Html.LabelFor(x => x.SelectedItemId)
    @Html.DropDownListFor(x => x.SelectedItemId, Model.Items)
    <button type="submit">OK</button>
}

@if (Model.Results != null)
{
    var grid = new WebGrid(Model.Results);
    @grid.GetHtml();
}

もちろん、DropDownList の値を Web サービスからも取得する必要がある場合は、Items プロパティをセッター付きの自動プロパティにし、GET および POST アクション内で WCF サービスの対応するメソッドを呼び出して値を取得し、バインドすることができます。 .

于 2012-10-16T08:07:03.103 に答える