我正在使用Visual Studio 2013.我有一个现有的WebForms Web项目,我在Dave Paquette的这篇文章后添加了MVC - http://www.davepaquette.com/archive/2013/12/30/so-you-inherited-an-asp-net-web-forms-application.aspx
然而,从现有的aspx页面中添加的MVC区域渲染局部视图的最佳方法是什么?
我以为我可以在我的aspx页面上有一个div:
<div id="mvcPartial"></div>
然后进行类似下面的ajax调用:
$.ajax({
url: '/MVCArea/MyController/MyAction',
type: 'GET',
success: function (data) {
$('#mvcPartial').html(data);
},
error: function (xhr) {
alert("Failedto return view");
}
});
有没有更好的方法来获取在aspx页面中呈现的MVC视图?
答案 0 :(得分:0)
javascript helper:
function getPartial(url,data,controlId)
{
$.ajax({
type: "GET",
data: data,
url: url,
cache: false
}).done(function (result) {
$(controlId).html(result);
}).fail(function (jqXHR, textStatus) {
$(controlId).html("Request failed: " + textStatus);
});
}
答案 1 :(得分:0)
您所做的可能是最简单,最安全的方法,因为它避免了在同一Web请求中尝试混合WebForms和MVC上下文。
缺点当然是您需要2个http请求才能获取页面内容。
如果您想将一个简单的MVC部分视图作为aspx页面本身的一部分呈现,而不需要单独的请求,您可以尝试以下方法。
1)在你的代码后面创建一个HtmlHelper实例。以下代码改编自Access HtmlHelpers from WebForm when using ASP.NET MVC
protected HtmlHelper htmlHelper;
protected void Page_Load(object sender, EventArgs e)
{
var httpContext = new HttpContextWrapper(HttpContext.Current);
RouteData routeData = new RouteData();
routeData.Values["controller"] = "Dummy";
var controllerContext = new ControllerContext(httpContext, routeData, new DummyController());
var viewContext = new ViewContext(controllerContext, new WebFormView(controllerContext, "View"), new ViewDataDictionary(), new TempDataDictionary(), TextWriter.Null);
htmlHelper = new HtmlHelper(viewContext, new ViewDataBag());
}
private class ViewDataBag : IViewDataContainer
{
ViewDataDictionary viewData = new ViewDataDictionary();
public ViewDataDictionary ViewData
{
get
{
return viewData;
}
set
{
viewData = value;
}
}
}
private class DummyController : Controller
{
}
请注意,此代码非常重要,当然感觉非常'hacky'。如果您经常使用它,可以将它放在基页或基本UserControl类中。
在.aspx文件中,您现在可以通过调用htmlHelper.Partial呈现部分视图:
<div id="mvcPartial">
<%:htmlHelper.Partial("_SimplePartial") %>
</div>
我使用Web Forms 4.5和MVC 5进行了测试,它在简单的情况下工作。我无法确定它是否适用于所有情况。