[英]return another MVC3 view of the same controller after ajax is used
如何返回同一控制器的另一個視圖? 我為應用程序進行了一些調試:ajax方法調用控制器動作,傳遞參數,執行指令。 在
return View("GetEmployeeDays", model);,
“ GetEmployeeDays
”視圖從模型接收值並進行填充,但是最終在瀏覽器中我收到了初始視圖(來自我發出的請求)-而不是GetEmployeeDays
視圖
來自Global.asax的路由代碼:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
調用動作控制器並傳遞參數的JQuery代碼:
<script type="text/javascript">
$(document).ready(function () {
$('li').click(function () {
$.ajax({
url: '@Url.Action("GetEmployeeDays", "ApproveWork")',
type: 'GET',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: { userCode: $(this).attr('id') }
})
});
});
應該呈現GetEmployeeDays
視圖的控制器操作:
[HttpGet]
public ActionResult GetEmployeeDays(string userCode)
{
.....
return View("GetEmployeeDays", model);
}
您無法通過ajax請求進行重定向。 嘗試一個簡單的GET請求:
<script type="text/javascript">
$('li').on('click', function()
{
document.location.href = '@Url.Action("GetEmployeeDays", "ApproveWork")' + '?param1=val1¶m2=val2';
});
</script>
控制器現在很好。
編輯:按要求更新
我不知道您要重新渲染的原始視圖是什么,我想您的問題很可能是您應該以PartialView的形式返回此視圖,因為您正在發出Ajax請求。 另外,看起來您實際上並沒有在任何地方渲染結果。 您對提琴手的反應是什么? 它顯示返回的HTML嗎? 如果是這樣,您可能只需要利用$ .ajax中的.done回調將其轉儲到頁面上。
<script type="text/javascript">
$(document).ready(function () {
$('li').click(function () {
$.ajax({
url: '@Url.Action("GetEmployeeDays", "ApproveWork")',
type: 'GET',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: { userCode: $(this).attr('id') }
}).done(function() {
$(this).addClass("done");
});
});
</script>
如果只想將某些內容加載到頁面的一部分中而不重新加載到新頁面,則應在ajax函數的回調中更新頁面的特定部分。
$(function(){
$('li').click(function () {
var uCode=$(this).attr("id");
$.get("@Url.Action("GetEmployeeDays","ApproveWork")?userCode="+uCode,
function(response){
$("#DivToBeUpdated").html(response);
});
});
});
如果要重定向到新視圖,則應通過更新location.href
屬性值來實現。
$(function(){
$('li').click(function () {
var uCode=$(this).attr("id");
var url="@Url.Action("GetEmployeeDays","ApproveWork")?userCode="+uCode;
window.location.href=url;
});
});
});
從@David Diez構建,您可以將參數附加到您的請求中,如下所示:
<script type="text/javascript">
$('li').on('click', function()
{
document.location.href = '@Url.Action("GetEmployeeDays", "ApproveWork", new { caseSensativeParamName = "foo" })';
});
</script>
當然,您也可以采用JavaScript路線。 這樣的事情應該起作用:
<script type="text/javascript">
$('li').on('click', function()
{
var targetUrl = '@Url.Action("GetEmployeeDays", "ApproveWork")';
var yourParam = $("#input-id").val();
targetUrl = targetUrl + '?yourServerParamName=' + yourParam;
document.location.href = targetUrl;
});
</script>
干杯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.