[英]Sending a string and a model in Url.Action
我的cshtml中有以下URL.Action:
<a href="@Url.Action("ShowStudent", "Student", new { studentCode = item.StudentCode, newPrivateStudent = Model.PrivateStudent })">
<i class="icon-arrow-right"></i>
</a>
我的控制器中的操作是:
public ActionResult ShowCShowStudentlient(studentCode studentCode , PrivateStudentModel newPrivateStudent )
{ *some actions*}
在控制器中單擊該動作時,會將newPrivateStudent設置為null。
知道為什么嗎?
將newPrivateStudent屬性設置為隱藏在cshtml中。
首先,您應該查看此@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
)上看到的newPrivateStudent
,輔助程序沒有添加復雜對象的內容,而是隱式調用ToString()
,該方法返回該對象的完全限定名稱(隨后newPrivateStudent
在action方法中具有空值)。 因此,這樣做的正確方法是使用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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.