Во-первых, вы должны посмотреть на этот @Url.Action
помощник:
@Url.Action("ShowStudent", "Student", new { studentCode = item.StudentCode, newPrivateStudent = Model.PrivateStudent })
Приведенный выше помощник сгенерирует URL со строкой запроса, как в следующем примере (уже протестирован):
<a href="/Student/ShowStudent?studentCode=XXX&newPrivateStudent=ProjectNamespace.Models.PrivateStudent">...</a>
Как вы видите в последнем параметре (newPrivateStudent
), вместо добавления содержимого сложного объекта, помощник неявно вызывает ToString()
, который возвращает полностью определенное имя этого объекта (и впоследствии newPrivateStudent
имеет нулевое значение в действии метод). Следовательно, правильный способ сделать это - использовать обратный вызов AJAX для отправки соответствующего ключа вместе с содержимым модели в действие контроллера и отправки своего ответа в виде частичного представления целевому элементу DOM.
Вот пример отправки содержимого модели внутри формы с обратной передачей AJAX (предполагается, что для создания элементов ввода используются HTML-помощники):
$('#triggerElementId').click(function () {
// this example sets string parameter as hardcoded string
// change it to actual value by jQuery selector with val() or text() function
var sCode = "XXX";
var modelData = $('form').serialize();
// or serializeArray() if you want to push additional data
// if model contents should left unchanged, use 'var modelData = @Html.Raw(Json.Encode(Model.PrivateStudent))'
$.ajax({
type: 'POST',
url: '@Url.Action("ShowStudent", "Student")',
data: { studentCode: sCode, newPrivateStudent: modelData },
success: function (result) {
$('#targetResultElement').html(result);
},
error: function (xhr, status, error) {
// error handling
}
});
});
Затем установите действие контроллера для извлечения ключа и сериализованного содержимого модели, как в примере ниже:
[HttpPost]
public ActionResult ShowStudent(string studentCode, PrivateStudentModel newPrivateStudent)
{
// some actions
return PartialView("_ShowStudent", viewModelName); // mention partial view & viewmodel name here
}