0

から入力されるドロップダウンリストがあります

ビューモデル:

public class OrgPages
{
    public int ID { get; set; }
    public string URL { get; set; }
}

ヘルパー:

   public SelectList PageList()
    {
        var pagelist = new List<OrgPages>();

        foreach (var count in Enumerable.Range(1, 10))
        {
            var pages = new OrgPages();

            pages.ID = count;

            if(count == 1)
                pages.URL = "Done";
            else if (count == 2)
                pages.URL = "Address";
            else if (count == 3)
                pages.URL = "Import/Export";
            else if (count == 4)
                pages.URL = "Membership";
            else if (count == 5)
                pages.URL = "Business Type";
            else if (count == 6)
                pages.URL = "Industry Type";
            else if (count == 7)
                pages.URL = "Phone Number";
            else if (count == 8)
                pages.URL = "Email";
            else if (count == 9)
                pages.URL = "Website";
            else if (count == 10)
                pages.URL = "Note";
            pagelist.Add(pages);
        }
        return new SelectList(pagelist, "ID", "URL", 0);            
    }

コントローラーでヘルパーを開始します。

private DropDownPopulatorController ddp = new DropDownPopulatorController();

そして、投稿ではなく作成アクションで、ViewBag を呼び出します。

ViewBag.OrgPages = ddp.PageList();

HTTP POST create アクションで、OrgPages 値を渡します。

[HttpPost]
public ActionResult Create(OrganizationEmail email, int OrgPages)
{
    try
    {
        // TODO: Add insert logic here
        using (var db = new VAGTCEntities())
        {
            db.OrganizationEmails.Add(email);
            db.SaveChanges();
        }
        if (OrgPages == 2)
            return RedirectToAction("Create", "OrgAddress");
        else if (OrgPages == 3)
            return RedirectToAction("Create", "OrgIE");
        else if (OrgPages == 4)
            return RedirectToAction("Create", "OrgMembership");
        else if (OrgPages == 5)
            return RedirectToAction("Create", "OrgBusinessType");
        else if (OrgPages == 6)
            return RedirectToAction("Create", "OrgIndustryType");
        else if (OrgPages == 7)
            return RedirectToAction("Create", "OrgPhone");
        else if (OrgPages == 8)
            return RedirectToAction("Create", "OrgEmail");
        else if (OrgPages == 9)
            return RedirectToAction("Create", "OrgWebsite");
        else if (OrgPages == 10)
            return RedirectToAction("Create", "OrgNote");
        else
            return RedirectToAction("Index");
    }
    catch (Exception)
    {
        ModelState.AddModelError("Error", "This item exists in the database already.");
    }
    return View(email);
}

そして、ビューの作成ページで、これをフィールドセット内に配置しました。

<div>
    @Html.Label("Add:")
</div>
<div>
    @Html.DropDownList("OrgPages")
</div>

これで、誰かがフォームを送信すると、すぐにアクセスしたい次のページを選択できるようになりました。フォームの送信にエラーがない場合 (重複がない場合など) は問題なく動作します。ただし、重複した主キー、または同様のエラーがある場合、エラーが吐き出されますThere is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'OrgPages'.

助けてくれてありがとう!

編集 * アクションの作成

public ActionResult Create()
{
    ViewBag.OrgPages = ddp.PageList();
    return View();
}
4

1 に答える 1

1

数回デバッグし、それをたどった後、作成に戻るときに引っかかっていることに気付きました: return View(email);

その時点で、OrgPages の ViewData はもうありませんでした。ViewBag.OrgPages = ddp.PageList();したがって、エラーが表示された後、catch ブロックで再度呼び出すだけ で済みました。それはそれを修正しました!

于 2012-11-18T15:55:35.517 に答える