У меня проблема с тем, что у меня есть viewmodel (MasterViewModel) с вложенной viewmodel (ChildViewModel), и у меня есть выпадающий список в форме, которая делает запись ajax через jQuery для обновления частичного представления.Но что бы я ни делал, модель childview в действии Part всегда пуста, и я не понимаю почему.Вот упрощенный пример кода:
Контроллер:
Namespace MvcApplication2
Public Class TestController
Inherits System.Web.Mvc.Controller
'
' GET: /Test
Function Index() As ActionResult
Dim viewModel As New MasterViewModel
viewModel.MyId = 123
viewModel.ChildViewModel = New ChildViewModel With {.Name = "woohoo"}
viewModel.Items = New List(Of SelectListItem) From { _
New SelectListItem With {.Text = "first", .Value = "1"},
New SelectListItem With {.Text = "second", .Value = "2"}
}
viewModel.SelectedItem = New List(Of SelectListItem) From { _
New SelectListItem With {.Text = "first", .Value = "1"}
}
Return View(viewModel)
End Function
Function Part(ByVal viewModel As ChildViewModel) As ActionResult
viewModel.Name = viewModel.Name & "_"
Return PartialView(viewModel)
End Function
End Class
End Namespace
Индекс:
@ModelType MvcApplication2.MasterViewModel
@Code
ViewData("Title") = "Index"
End Code
<script type="text/javascript" language="javascript">
function update() {
$('#myForm').change(function () {
var form = $('#myForm');
$.ajax({
url: form.attr('action'),
type: form.attr('method'),
data: form.serialize(),
success: function (result) {
$('#mjoo').html(result);
}
});
});
}
</script>
<h2>Index</h2>
<p>@Model.MyId</p>
@Using Html.BeginForm("Part", "Test", FormMethod.Post, New With {.id = "myForm"})
@Html.DropDownListFor(Function(x) x.SelectedItem, Model.Items, New With {.onchange = "update()"})
@Html.HiddenFor(Function(x) x.ChildViewModel)
End Using
<div id="mjoo">
@Html.Partial("Part", Model.ChildViewModel)
</div>
Вид детали:
@ModelType MvcApplication2.ChildViewModel
<p>@Model.Name</p>
Модели просмотра:
Public Class MasterViewModel
Property ChildViewModel As ChildViewModel
Property Items As List(Of SelectListItem)
Property SelectedItem As List(Of SelectListItem)
Property MyId As Integer
End Class
Public Class ChildViewModel
Property Name As String
End Class
Что может быть не так с этим.Я знаю, что я что-то упускаю, но я просто не вижу этого.