2012-12-03 50 views
0

我使用this example來開發一個下拉列表。直到我在我的視圖中調用我的模型的方式進行了一些更改後,它才運行良好。下拉列表模型類被稱爲dropdownModel。因爲我的視圖包含2個模型,所以我創建了一個「大」模型類BigModelClass,它包含我的兩個模型。MVC3使用下拉列表模型和其他模型在相同的視圖

大模型看起來像這樣

public class BigModelClass { 
    public DropDownModel dropDownModel { get; set; } 
    public IEnumerable<projectname.Model.model2> var2 { get; set; } 
} 

在我看來,我稱之爲模型:

@model BigModel 
在我看來

現在,我打電話使用下拉列表如下:

@Html.LabelFor(m => m.dropDownModel.State) 
@Html.DropDownListFor(m => m.dropDownModel.State, 
       new SelectList(Model.dropDownModel.StateList, "Value", "Text")) 
<span class="required"></span> 
@Html.ValidationMessageFor(m => m.dropDownModel.State) 

不幸的是,我得到以下錯誤:

System.NullReferenceException: Object reference not set to an instance of an object.

上線

@Html.DropDownListFor(m => m.dropDownModel.State, new SelectList(Model.dropDownModel.StateList, "Value", "Text"))

Averything如果我只用dropDownModel優良樣板工程。

任何幫助是非常讚賞

編輯 的視圖控制器:

public ActionResult Index(){ 
    return View (new BigModelClass()); 
} 
+0

發佈您的控制器的代碼,問題可能是您如何實例化模型。 – Johann

+0

您正在使用m.dropDownModel,但我無法在BigModel中查看dropDownModel的定義 –

+0

@Johann&Behnam:請參閱編輯。 – jpo

回答

2

假設你直接從例如複製DropDownModel,你需要添加一個構造函數來BigModelClass和實例化dropDownModel那裏。

public class BigModelClass { 
    public DropDownModel dropDownModel { get; set; } 
    public IEnumerable<projectname.Model.model2> var2 { get; set; } 

    public BigModelClass() { 
     dropDownModel = new DropDownModel(); 
    } 
} 

,或者在你的控制器,實例化dropdownmodel:

public ActionResult Index(){ 
    return View (new BigModelClass { 
     dropDownModel = new DropDownModel() 
    }); 
} 
+0

非常感謝! – jpo

1

最有可能你的Model.dropDownModel是空的,我敢肯定你沒有實例化它的默認構造函數BigModelClass()。而當它確定爲屬性定義m => m.dropDownModel.State不能恢復項目集合的實例:Model.dropDownModel.StateList

+0

那我該如何糾正呢? – jpo

+1

您需要推送(或者如果它適合您的項目,請將其拉​​出),將項目集合傳遞給'Model.dropDownModel.StateList',例如將它傳遞給BigModelClass(items)過載。 – Dima

0

,因爲你沒有將數據綁定到下拉列表這個問題發生了。您必須將數據綁定到控制器操作中的下拉列表中。如果你綁定了你的控制器動作的數據,那麼確保它也綁定在[httppost]控制器actionstate中,modelstate.valid爲false。

public ActionResult Register() 
    { 
     RegisterModel model = new RegisterModel(); 
     List<SequrityQuestion> AllSequrityQuestion = new List<SequrityQuestion>(); 
     model.SequrityQuestions = GetAllSequrityQuestion(); 

     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
      // there was a validation error => 
      // rebind categories and redisplay view 

      model.SequrityQuestions = GetAllSequrityQuestion(); 
     } 
     if (ModelState.IsValid) 
     { 
      // Your code to post 
     } 

     return View(model); 
    } 

在上面的例子有在名爲SequrityQuestions寄存器模型下拉列表。我認爲這就是你遇到這個問題的原因。在modelstate.valid false的情況下,一定要將數據綁定到dropdownlist,那麼你的問題就會消失。

相關問題