2010-07-23 123 views
0

我正在使用jQuery的asp.net mvc。我正在嘗試製作一個表格,並更新制作該文章的ascx。ASP.Net MVC Form-post和jquery查看未更新

我正在與下面的代碼後:

$(document).ready(function() { 
    $('#search-form').submit(function() { 
     var form = $('#search-form'); 
     var action = form.attr('action'); 
     var serializedForm = form.serialize(); 

     $.post(action, serializedForm, function() { 

     }); 
     return false; 
    }); 
}); 

然後,我有一個動作:

[HttpPost] 
public ActionResult Method(FormCollection collection) 
{ 
    //code... 
    ViewData["post"] = "Hello world"; 
    return View(); 
} 

這是工作的罰款。代碼正在執行,但問題發生在返回視圖之後。例如,如果我嘗試在視圖中打印出「Hello World」,它永遠不會更新。有人可以解釋爲什麼並且有人知道解決方案嗎?

回答

0

當你做這樣一個AJAX請求,你有太多的回報訪問由操作方法,而不是與控制器相關的全部數據存儲開發生產的視圖返回的結果。

如果你想顯示「Hello World」的文本,然後你不得不要麼寫出來的頁面視圖的一部分,也包括在輸出響應。

Response.Write("Hello World"); 

您的視圖返回後,您無權訪問ViewData或TempData集合。聽起來這就是你所期待的。

0

我建議你做一個局部視圖ajax.form,並做

<div id="DIVtoUpdate"> Render.Partial("PartialViewName",model);</div> 

和您的局部視圖裏面你長了

using (Ajax.BeginForm("*ActionName*", new { *parameter = ID* }, new AjaxOptions { UpdateTargetId = "DIVtoUpdate", OnSuccess = "*JavaScript that executes on success*", OnComplete = "s*ame as on success*", InsertionMode = InsertionMode.Replace })) 
{ 
    /*REST OF YOUR VIEW*/ 
} 

所以當你職位和控制器動作執行你應該返回

return PartialView("PartialViewNAme",model); 

,你的DIV將獲得用新的數據更新。 (注意:禁用ajax:緩存,在某些情況下,你可能會遇到問題)

0

asp.net將期望與您的動作同名的視圖,或者您應該明確告訴您最終返回哪個視圖。例如:return View(「ViewName」);

ViewData是一個基於字典的集合,將在類似於ViewState的客戶端提供。

你必須得到它鑄造,應該使用。

例如

在視圖頁面

String _data =(String)ViewData["post"]; 

然後如果你想在你的頁面顯示

<span>@_data</span> 

@{ 

<span>_data</span> 

} 

看到另一個例子 在這裏你可以迭代,也可以生成動態html。 MVC爲像這樣的動態控件提供更好的選擇。

@{ 
IList<items> itemlist=(IList<items>)ViewData["yourString"]; 
    foreach(item in itemlist) 
    { 

    <label>item</label> <br/> 

    } 
} 

,你可能會得到輸出像
物品1
ITEM2
項目3
等。