2012-05-15 22 views
0

我不知道我做錯了什麼,或者是什麼原因導致了這個錯誤。當我提交此表到控制器,控制器接收2個空字段:控制器收到空表格

下面是這個視圖裏面的形式:

@Using Html.BeginForm("contactSearch", "search", FormMethod.Post) 
    @Html.TextBox("SearchString") 
    @Html.DropDownList("opportunite", "Choisissez une opportunité") 
    @<input type="submit" value="Submit!" /> 
End Using 

這裏是控制器:

<HttpPost()> 
    Function contactSearch(ByVal search As String, ByVal opportunite As opportunite) As ViewResult 
     If opportunite Is Nothing Then 
      ModelState.AddModelError("opportunite", "Opportunite is empty") 
      ViewBag.opportunite = New SelectList(db.opportunite, "idOpportunite", "nomOffre") 
      Return View() 
     End If 
    ... 

我還有點問題,如果我寫:

Function contactSearch(ByVal searchString As String, ByVal opportunite As Integer) 

如果其中一個字段是空的,我得到這個錯誤:參數字典包含空條目參數'機會'...

所以,我必須解決這個問題的唯一方法是使用代碼下面。沒有更好的方法來解決這個問題嗎?

Function contactSearch(ByVal search As String, ByVal opportunite As opportunite) As ViewResult 
     Dim opport As Integer = 0 
     Try 
      opport = Val(Request("opportunite")) 
     Catch ex As Exception 
     End Try 

     If opport = 0 Then 

回答

1

您錯誤地命名了您的動作參數。應該是這樣的:

<HttpPost()> 
Function contactSearch(ByVal searchString As String, ByVal opportunite As String) As ViewResult 
    ... 

請注意,2個參數的類型爲String。在你的代碼中,第二個參數使用了一些自定義opportunite類型,但這沒有意義,因爲DropDownList只發送選定的值。你不能指望它綁定到一個複雜的類型。

+0

選擇列表的的HTML代碼給水木清華這樣的:<期權價值=「2」>名稱 ......如果我寫: 「作爲整數的機會」?我也明白爲什麼它以前工作,我問控制器內的值這種方式:Dim chaine As String = Request(「searchString」) –

+0

是的,你可以在這種情況下使用Integer。是的,這就是之前的原因。因爲您使用正確的名稱顯式提取了Request對象中的值。如果您尊重動作參數參數的相同命名約定,則它也可以工作,因此您不再需要從Request對象手動獲取它們。 –

+0

所以,我編輯了另一個問題,因爲我認爲我所做的解決我的問題的方法可以得到改進 –

1

您是否獲得'搜索'值?

嘗試通過的形式收藏,看看有什麼是越來越貼

public ActionResult CreateMarketingType(FormCollection form) 
{ 
     ... 
} 
相關問題