0

ASP.NET MVC3 の学習を始めたばかりです。

次のシナリオがあります。特定のモデルの作成ビューで、ユーザーはリンクをクリックしてコード/説明を検索できます (Html.ActionLink ヘルパーでレンダリングされます)。ルックアップ値は、データベース内のルックアップ テーブルから取得され、別のビューに表示されます。2 つのビューは、2 つの異なるコントローラーによって処理されます。ユーザーが後者のビューでルックアップ値を選択すると、その値 (コード + 説明) が作成ビューにコピーされます。

2 つのビュー間でデータを渡すにはどうすればよいですか? HTTP リクエストのステートレスな性質のため、これは不可能ですか?

Ajax リンクで試してみましたが、うまくいきませんでした。

コード スニペット ビューの作成:

<fieldset>
    <legend>Z-Info</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.ZZL_U_CODE)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.ZZL_U_CODE)
        @Html.ValidationMessageFor(model => model.ZZL_U_CODE)
    </div>

    <div class="editor-label">
        @Ajax.ActionLink("Land code test", "Index", "Domein", new {name = "lan" }, 
            new AjaxOptions {
                HttpMethod = "Get",
                Url = Url.Action("Index", "Domein", new {name = "lan" }), 
                OnBegin = "OnBegin",
                OnSuccess = "InsertCodeNaam",
                OnFailure = "OnFailure",
                OnComplete = "OnComplete"
            })
    </div>

ユーザーがコード/説明を選択すると、データSelectを返す次のアクションが呼び出されますJson

アクションを選択:

public class DomeinController : Controller
{
    private ZZLEntities db = new ZZLEntities();

    //
    // GET: /Domein/

    public ViewResult Index(string name)
    {
        DomeinViewModel model = DomeinRepositry.GetAll(name);
        return View(model);
    }



     GET: /Domein/Select/5

    public JsonResult Select(int id, string naam)
    {
        return Json(new DomCodeNaam { codeValue = id, naamValue = naam }, JsonRequestBehavior.AllowGet);
    }

他の解決策はありますか?部分ビューはオプションですか?

4

1 に答える 1

0

2 つのオプションがあります。

  1. ルックアップ値をポストバックしてから、最初の (「作成」) ビューに内部的にリダイレクトしますが、今回はユーザーが選択した値を (内部的に) 渡し、選択した値でビューをレンダリングできるようにします。派手ではないかもしれませんが、実装は非常に簡単です。ただし、ユーザーが最初のフォームに既に入力したデータは、投稿するか、これを 2 ステップのプロセスにしない限り失われます。
  2. Ajax を使用する場合は、ユーザーのアクション (ユーザーが選択したルックアップ値など) に応じて、クライアント側の最初の「作成」ビューでフォームの適切な部分を更新する必要があります。

ただし、「別のビュー」が正確に意味するものとは少し混乱しています

于 2012-06-05T14:54:09.833 に答える