Jquery 当Ajax请求查看时,将视图呈现为字符串
我将视图呈现为路由请求,如/controller/action(例如/Page/Create),非常经典 我正在创建一个表单,其中视图将通过jQuery get()的AJAX请求加载,因此本质上我需要我的视图,或者更准确地说,我的控制器操作,以便在向呈现视图的路由发出AJAX请求时返回纯HTML字符串。我希望使用与普通请求相同的视图,因此我无法创建任何新视图Jquery 当Ajax请求查看时,将视图呈现为字符串,jquery,asp.net-mvc,Jquery,Asp.net Mvc,我将视图呈现为路由请求,如/controller/action(例如/Page/Create),非常经典 我正在创建一个表单,其中视图将通过jQuery get()的AJAX请求加载,因此本质上我需要我的视图,或者更准确地说,我的控制器操作,以便在向呈现视图的路由发出AJAX请求时返回纯HTML字符串。我希望使用与普通请求相同的视图,因此我无法创建任何新视图 这类似于调用RenderPartial(“MyViewUserControl”),但从JS代码内部执行。您需要将HTML字符串移动到部分视
这类似于调用RenderPartial(“MyViewUserControl”),但从JS代码内部执行。您需要将HTML字符串移动到部分视图,然后在常规视图中包含部分视图(如果适用),并在操作中呈现部分视图 您可能希望在操作中使用
Request.IsAjaxRequest()
扩展方法
要获取Javascript中的HTML,您可以对操作的URL发出普通AJAX请求。这里没有什么特别需要做的-只需像普通一样使用.get()请求您的操作方法,并将响应类型设置为“HTML”
$.get(“”,{},
功能(数据){
警报(“数据加载:”+数据);
},
“html”)
我的答案基于SLAks回复-我将此存档以供以后参考或帮助他人
这是我的结构:
1) Create.aspx(ViewPage)使用RenderPartial(“Tab CreateEditForm”)来呈现创建/编辑表单,即
2) Tab-CreateEditForm.ascx(部分)
3) 创建检测发出何种请求的操作。如果我们发出AJAX请求,我们可能不希望呈现Create.aspx,这是默认设置,而是呈现选项卡CreateEditForm,因为它只包含表单标记和字段,没有页面指令、标题、标题和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
}
如果我的视图包含所有表单代码,这是正确的,但事实上我的表单在ASCX中。就像SLaks说的。。
//
// 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
}