2010-03-22 37 views
0

我有我的视图渲染路由像/ controller/action(例如/ Page/Create)这样的请求,非常经典。当Ajax请求查看时渲染视图为字符串

我正在创建一个表单,通过AJAX请求使用jQuery get()加载视图,所以基本上我需要我的视图或者准确地说,我的控制器操作在AJAX请求发送时返回纯HTML字符串呈现View的路线。我想使用与普通请求相同的视图,所以我不能创建任何新的视图。

这就像调用RenderPartial(“MyViewUserControl”),但从JS代码中。

回答

0

您需要将HTML字符串移至部分视图,然后在常规视图中包含部分视图(如果适用)并在您的操作中呈现部分视图。

您可能会想要在操作中使用Request.IsAjaxRequest()扩展方法。

要在Javascript中获取HTML,您可以对操作的URL进行正常的AJAX请求。

0

这里没有什么特别的你需要在这里做 - 只需要像。正常一样用.get()来请求你的动作方法,并将你的响应类型设置为“html”。基于SLAks响应

$.get('<% Url.Action("MyActionMethod") %>', { }, 
    function(data){ 
    alert("Data Loaded: " + data); 
    }, 
    "html") 
+0

这是真的,如果我的意见包括所有的表格代码,但事实上我有我的表格在ASCX。就像SLaks说的那样.. – mare 2010-03-22 20:07:32

0

我的答案 - 我这个存档以供日后参考或帮助别人。

这是我的结构:

1)Create.aspx(的ViewPage)使用的RenderPartial( “制表CreateEditForm”)来呈现创建/编辑的形式,这是 2)制表CreateEditForm.ascx(该部分) 3)创建检测正在进行的请求的操作。如果我们正在发出AJAX请求,我们可能不想呈现默认情况下的Create.aspx,而是渲染Tab-CreateEditForm,因为它仅包含表单标记和字段以及NO页面指令,头部,标题和所有Create.aspx中的其他元素。

所以动作看起来是这样的:

// 
    // GET: /Tab/Create/{tabGroupSlug} 
    [CanReturnModalView] 
    [Authorize(Roles = "Administrators")] 
    public ActionResult Create(string tabGroupSlug) 
    { 
     Tab tab = new Tab(); 
     if (Request.IsAjaxRequest()) 
      return View("Tab-CreateEditForm", tab); // returns partial 

     return View(tab); // returns Create.aspx 
    } 

这是我的编辑操作也使用同样的技术,因为编辑视图(Edit.aspx页)也使用相同的编辑部分控制。

// 
    // GET: /Tab/Edit/{slug} 
    [CanReturnModalView] 
    [Authorize(Roles = "Administrators")] 
    public ActionResult Edit(string slug) 
    { 
     Tab editing = (Tab) _repository.GetInstance(slug); 
     if (Request.IsAjaxRequest()) 
      return View("Tab-CreateEditForm", editing); // returns partial 

     return View(editing); // returns Edit.aspx 
    }