2010-05-26 17 views
0

我在使用ASP.MVC中的SelectList時遇到了一些麻煩。Asp-MVC中的SelectList和數據庫中的數據

這是問題:我有一個創建視圖並begind一個ViewModel模型。

頁面加載正常(GET動詞)。但是當發佈時,會發生一些情況,我的模型被認爲是無效的,並且無法插入。這是我迄今爲止所嘗試的。

public class DefinitionFormViewModel 
{ 
    private Repository<Category> categoryRepository = new Repository<Category>(); 
    public Definition ViewDefinition { get; private set; } 
    public SelectList Categories { get; private set; } 

    public DefinitionFormViewModel(Definition def) 
    { 
     ViewDefinition = def; 

     // here i wanted to place it directly, like shown in NerdDinner Tutorial 
     // new SelectList(categoryRepository.All(),ViewDefinition.Category); 


     Categories = new SelectList(categoryRepository.All(), "CategoryId", "CategoryName", ViewDefinition.CategoryId); 
    } 
} 

// pageview which inherits DefinitionFormViewModel 
     <div class=editor-field"> 
      <%= Html.DropDownList("Category",Model.Categories) %> 
      <%= Html.ValidationMessageFor(model => Model.ViewDefinition.Category) %> 
     </div> 

// controller methods 
    [Authorize] 
    public ActionResult Create() 
    { 
     Definition definition = new Definition(); 

     return View(new DefinitionFormViewModel(definition)); 
    } 

    [AcceptVerbs(HttpVerbs.Post), Authorize] 
    public ActionResult Create(int id,Definition definition) 
    { 
     Term term = termRepository.SingleOrDefault(t => t.TermId == id); 

     if (term == null) 
     { 
      return View("NotFound", new NotFoundModel("Termo não encontrado", "Termo não encontrado", 
      "Nos desculpe, mas não conseguimos encontrar o termo solicitado.", "Indíce de Termos", "Index", "Term")); 
     } 
     else 
     { 
      if (ModelState.IsValid) 
      { 
       try 
       { 
        definition.TermId = term.TermId; 
        definition.ResponsibleUser = User.Identity.Name; 

        UpdateModel(definition); 

        term.Definitions.Add(definition); 

        termRepository.SaveAll(); 

        return RedirectToAction("Details", "Term", new { id = term.TermId }); 
       } 
       catch (System.Data.SqlClient.SqlException sqlEx) 
       { 
        ModelState.AddModelError("DatabaseError", "Houve um erro na inserção desta nova definição"); 
       } 
       catch 
       { 
        foreach (RuleViolation rv in definition.GetRuleViolations()) 
        { 
         ModelState.AddModelError(rv.PropertyName, rv.ErrorMessage); 
        } 
       } 
      } 
     } 
     return View(new DefinitionFormViewModel(definition)); 
    } 

對於這篇較長的文章我很抱歉,但我無法弄清楚。我沒有任何圖形錯誤或例外。我的執行結束於if(ModelState.IsValid)。

感謝您的時間

喬治

回答

0

這應該改變從

[AcceptVerbs(HttpVerbs.Post), Authorize] 
    public ActionResult Create(int id,Definition definition) 
    {...} 

[AcceptVerbs(HttpVerbs.Post), Authorize] 
     public ActionResult Create(int id,DefinitionFormViewModel definition) 
     {...} 

如果我有限的理解是正確的,問題在於傳遞參數到控制器。您創建了一個接受DefinitionFormViewModel的視圖,但是當您回發到服務器時,您當前的代碼需要Definition

(如果這是不正確或downvoted,請解釋,因爲我也渴望學習)

+0

你好艾哈邁德。我遇到了幾個麻煩。我會嘗試你的解決方案,我會將其發回。 THanks – 2010-05-27 16:17:00