簡體   English   中英

在Url.Action中發送字符串和模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM