2015-11-12 54 views
0

不確定我創建的下拉列表是否發送選定的值。我是否缺少DropDownList助手的參數?參數字典包含非空值類型'System.Int32'的參數'SolutionArchitectID'的空條目

CreateDropDowns方法

List<SelectListItem> EmployeeList = new List<SelectListItem>(); 

     foreach (Employee e in db.Employees) 
     { 
      EmployeeList.Add(new SelectListItem { Text = e.FirstName + " " + e.LastName, Value = e.SolutionArchitectID.ToString() }); 
     } 

ViewBag.EmployeeList = EmployeeList; 

UpdateDetails方法

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult UpdateDetails(int SolutionArchitectID) { 

Asset currAppRecord = db.Assets.Where(a => a.ApplicationID == ApplicationID).Single(); 
... 
currAppRecord.SolutionArchitectID = SolutionArchitectID; 
... 
} 

查看

@using (Html.BeginForm("UpdateDetails", "Atlas")) 
{ 
... 
     <div class="form-group"> 
      <label class="control-label col-md-2" for="Employees">Solution Architect</label> 
      <div class="col-md-10"> 
       @Html.DropDownList("EmployeeList") 
      </div> 
     </div> 
... 
} 

SolutionArc hitectID是提交時在數據庫表中更新的字段。

+0

我想,問題是你的action方法參數是接收空/空字符串。嘗試在url中爲該參數發送一些整數值,然後重試。或者你可以將參數類型設置爲'string'並在控制器內解析它來處理。 –

+0

如果我從控制器的update方法中刪除了SolutionArchitectID參數,那麼表單更新會很好,這就是我認爲我必須使用DropDownList助手的錯誤重載的原因。 – SoloSheff

+0

我認爲你需要發佈一些示例代碼來顯示你正在從視圖到控制器的流程(例如:使用動作方法簽名和正確的標記你使用等) –

回答

0

在您的using中,沒有名稱爲SolutionArchitectID的Html控件。爲了您的表單能夠成功提交,您需要通過SolutionArchitectID。如下面的代碼所示。

@using (Html.BeginForm("UpdateDetails", "Atlas")) 
{ 
... 
     <div class="form-group"> 
      <label class="control-label col-md-2" for="Employees">Solution Architect</label> 
      <div class="col-md-10"> 
       @Html.DropDownList("EmployeeList") 
       @Html.Hidden("SolutionArchitectID", <<PutHereSomeValue>>) 
      </div> 
     </div> 
... 
} 

我覺得下面的回答將幫助更多

  • 你將如何爲SolutionArchitectID值?
  • 是否會用表單發回?
+0

SolutionArchitectID是提交時在數據庫表中更新的字段。爲了清晰起見,添加到原始帖子中。 – SoloSheff

+0

請將您的Form標籤和控制器方法一起發佈,以幫助您更好地進行操作。 – ndd

+0

已編輯。在視圖中包含表單,並在提交表單時調用更新方法 – SoloSheff

相關問題