2016-08-17 25 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

相关问题