SORU
3 AĞUSTOS 2010, Salı


Bu ViewData öğe anahtarı 'ANAHTAR' type 'Sistem.' ama yazın 'IEnumerable<SelectListİtem>' olmalı dize;

Bir veritabanı Seri-2-SQL ile eşleştirilmiş açılır liste, 2, ve bu hatayı almaya devam ediyorum ASP.NET MVC kullanarak doldurmak için çalışıyorum.

İkinci satırda 5* *türünde bir değişken ilan ediyorum çünkü kafam karıştı, ama bu hata bana bu durum böyle değil düşünüyorum. Bu çok basit bir iş olması gerekiyordu, ama mücadele ediyorum. Herhangi bir yardım için teşekkür ederiz.

İşte benim denetleyicisi ilginç bit:

public ActionResult Create()
{
    var db = new DB();
    IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
        b => new SelectListItem { Value = b.basetype, Text = b.basetype });
    ViewData["basetype"] = basetypes;
    return View();
}

Ve burada benim bakış ilginç bit

<div class="editor-label">
   <%: Html.LabelFor(model => model.basetype) %>
</div>
<div class="editor-field">
   <%: Html.DropDownList("basetype") %>
   <%: Html.ValidationMessageFor(model => model.basetype) %>
</div>

İşte Form gönderilirken SONRASI eylemi

// POST: /Meals/Create
[HttpPost]
public ActionResult Create(Meal meal)
{
    if (ModelState.IsValid)
    {
        try
        {
            // TODO: Add insert logic here
            var db = new DB();
            db.Meals.InsertOnSubmit(meal);
            db.SubmitChanges();
            return RedirectToAction("Index");
        }
        catch
        {
            return View(meal);
        }
    }
    else
    {
        return View(meal);
    }
}

Teşekkürler.

CEVAP
28 HAZİRAN 2011, Salı


Aynı sorun bende de vardı, ve sonunda cevabı buldum

Sorun formu doldurduktan sonra POST eylem, ModelState geçerli değil, ya da/try catch bir hata yakalamak, Görünüm döndü. Ama bu sefer Görünüm ViewData["basetype"] doğru olarak sahip değil.

Yine, muhtemelen aynı kodu daha önce kullanılmış ile doldurmak gerekir, bu işlemi tekrarlayın:

var db = new DB();
IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
    b => new SelectListItem { Value = b.basetype, Text = b.basetype });
ViewData["basetype"] = basetypes;

[HttpPost] yöntemi return View(meal) önce.

tam olarak bu sorunu çözmek

[HttpPost]
public ActionResult Create(Meal meal)
{
    if (ModelState.IsValid)
    {
        try
        {
            // TODO: Add insert logic here
            var db = new DB();
            db.Meals.InsertOnSubmit(meal);
            db.SubmitChanges();
            return RedirectToAction("Index");
        }
        catch
        {
            var db = new DB();
            IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
               b => new SelectListItem { Value = b.basetype, Text = b.basetype });
            ViewData["basetype"] = basetypes;
            return View(meal);
        }
    }
    else
    {
        var db = new DB();
        IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
            b => new SelectListItem { Value = b.basetype, Text = b.basetype });
        ViewData["basetype"] = basetypes;
        return View(meal);
    }
}

Bu soru oldukça eski olduğunu biliyorum, ama burada başka sonra gelebilir o yüzden bugün burada aynı sorunla geldim...

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FlippinWindows | #1 Windows Tutorial Channel!

    FlippinWindo

    23 Mayıs 2010
  • Fuse

    Fuse

    21 Kasım 2005
  • Google Chrome

    Google Chrom

    1 EYLÜL 2008