2016-08-17 26 views
0

我試圖將模型(在我的情況下是PresentationModel)作爲變量傳遞給控制器​​中的post方法。但它崩潰,因爲我的參數不與它一起發送。但是,這應該是可選的,但它仍然崩潰。這是我到目前爲止。模型沒有傳遞到控制器的post方法(asp.net visual basic)

型號

Public Class ClassA 

Public Shared Items As List(Of ClassA) = New List(Of ClassA) 

<Required(ErrorMessage:="Required")> 
<MinLength(100, ErrorMessage:="to short")> 
Public Name As String 

<Required(ErrorMessage:="Required")> 
Public Age As Integer 

Public Message As String 

Public Sub New(name As String, age As Integer, message As String) 
    Me.Name = name 
    Me.Age = age 
    Me.Message = message 
End Sub 

Public Sub AddItem(item As ClassA) 
    Items.Add(item) 
End Sub 
End Class 

PresentationModel

Public Class PMClassA 
Inherits ClassA 

Public Extra As String 

Public Sub New(name As String, age As Integer, message As String) 
    MyBase.New(name, age, message) 
End Sub 

End Class 

控制器

<HttpGet> 
Function Test() As ActionResult 
    Dim v As PMClassA = New PMClassA("test", 0, "test") 
    Dim ListItem As List(Of SelectListItem) = New List(Of SelectListItem) 

    For i As Integer = 0 To 5 
     v.AddItem(New ClassA("Name" + i.ToString(), i, "Message" + i.ToString())) 
     ListItem.Add(New SelectListItem With {.Text = PMClassA.Items.Item(i).Name, .Value = PMClassA.Items.Item(i).Name}) 
    Next i 

    ViewBag.Variable = v.Name 

    ViewData("List") = New SelectList(ListItem, "Value", "Text", "") 

    Return View(v) 
End Function 

<HttpPost> 
Function TestPost(Optional PMClassA As PMClassA = Nothing) As ActionResult 
    If (String.IsNullOrEmpty(Request.QueryString("PMClassA")) Or String.IsNullOrEmpty(Request.QueryString("Extra"))) Then 
     Return View("Error") 
    End If 

    If (ModelState.IsValid) Then 
     Return View() 
    End If 

    Return View 

查看

@ModelType TestApp.PMClassA 

<h2>@ViewBag.Variable</h2> 

@Using (Html.BeginForm("TestPost", "Home", FormMethod.Post)) 
@Html.AntiForgeryToken() 

@<div class="form-horizontal"> 
    <h4>ClassA</h4> 

    @Html.ValidationMessageFor(Function(model) model.Name) 
    <br /> 
    @Html.ValidationMessageFor(Function(model) model.Age) 
    <br /> 
    @Html.ValidationMessageFor(Function(model) model.Message) 

    <input type="hidden" value="extra stuff" name="Extra" /> 

    <hr /> 
    @Html.ValidationSummary(True, "", New With {.class = "text-danger"}) 
    <p>@Html.DropDownListFor(Function(model) model.Name, ViewData("List"))</p> 

    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" value="Opslaan" name="Opslaan" class="btn btn-default" /> 
     </div> 
    </div> 
</div> 
End Using 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

爲什麼我在我的post方法中沒有任何值?我應該得到帶有變量的PMClassA對象:來自ClassA的「Name,Age,Message」和來自PMClassA的「Extra」。

編輯

但是我可以獲得Name和Extra的信息。

Function TestPost(Optional Name As String = "", Optional Extra As String = "") As ActionResult 
    If (String.IsNullOrEmpty(Request.QueryString("Name")) Or String.IsNullOrEmpty(Request.QueryString("Extra"))) Then 
     Return View("Error") 
    End If 

但是爲什麼我收到「名稱」和「額外的」,而不是與「名稱」和「額外」填補了PMClassA對象?

回答

1

看看你的代碼在這裏,看起來你的界面不符合發佈要求,另外對於後期方法你不需要它在這種情況下是可選的,因爲期望是事實上獲得所需的模型。

其他一些觀察。

  1. 您有一個標記爲「年齡」的字段,但不提供輸入。這會導致一個問題,因爲你回來
  2. 你正在處理一個帖子,所以你在控制器中測試查詢字符串的嘗試很可能是不正確的。由於表單數據是POST並查看您的表單定義,它不會有任何查詢參數
+0

感謝您的快速響應。現在測試它。 – Developer

+0

仍然無法正常工作。我添加了 我也改變了最小長度到2. – Developer

+0

我試着將PMClassA中的inhertitance改爲一個變量。這一次它不會崩潰並進入方法。然而,PMClassA與額外變量不同。 – Developer

相關問題