我今天一直在将一个相当新的项目从ViewPages搬到Razor,一切似乎都很顺利.除了我试图使用Html.Action呈现用户控件,它不会呈现任何东西.
所以我有一个在Home/Index.cshtml中引用的Shared/_Layout.cshtml文件
Index.cshtml具有以下内容:
<article>
@Html.Action("LatestBlogsMainPanelWidget", "Blogs")
...
</article>
Run Code Online (Sandbox Code Playgroud)
我把陷阱放在BlogsController中,所以我知道这是被请求的.我也知道正在返回一个模型,视图引擎正在找到LatestBlogsMainPanelWidget,甚至正在运行一些伪Razor语法代码:@ {var s ="hello"; }
但是这个文件中的普通html没有进入浏览器.我也尝试了其他(以前工作)的部分,它们也不会出现(页面上的查看源确认它不存在).
我也试过替换@ {Html.RenderAction(...); } 没有成功.@ Html.Action的任何一侧都出现HTML,所以我知道Index.cshtml正在显示.
更诡异的_layout文件也有Html.Action命令和他们做似乎罚款.
我真的不确定还有什么要检查,或者如何确认管道正在获取HTML.任何人都可以帮忙吗?
谢谢!
我喜欢RenderAction在HtmlHelper对象上使用扩展方法来在页面中呈现侧边栏等,因为它允许我在控制器上的不同方法中保留每个这样的部分的数据访问代码.使用抽象控制器库,我可以定义一个默认的"侧边栏策略",然后可以在需要时通过覆盖具体控制器中的方法来改进.
我使用这种方法的唯一"问题"是,RenderAction它构建的方式是始终创建控制器类的新闻实例,即使从控制器中呈现动作已经在行动中.我的一些控制器在他们的Initialize方法中进行了一些数据查找,并且RenderAction在视图中使用该方法会导致在同一请求中多次出现这种情况.
RenderAction如果要调用的操作方法与"父"操作位于同一控制器类上,是否有一些替代方法将重用控制器对象?
我很高兴RenderAction()函数的功能.但是,我想在部分渲染的动作中加载和存储数据,以便一切都在一个页面中进行.
想象一下以下情况:我有一篇文章详细信息视图,其中文章内容下方有"添加评论"链接.点击后,评论表格会显示在帖子的内容下方.用户应该能够填充注释框,并在不刷新整个视图的情况下发送数据,只需要部分呈现的操作.此视图还必须提供在同一会话中添加的若干注释(对RenderAction()的几个AJAX调用);
哪种方法最好?
我正在创建一个使用区域的ASP.NET MVC 2(RTM)项目.一个区域的Home控制器的Index操作需要使用RenderAction来生成页面的子部分.调用的操作也在同一个Home控制器中定义.所以电话应该只是:
<% Html.RenderAction("List") %>
Run Code Online (Sandbox Code Playgroud)
但是,我得到一个例外:
在控制器'RareBridge.Web.Areas.Events.Controllers.HomeController'上找不到公共操作方法'List'.
请注意,我不在 "活动"区域!我在一个完全不同的领域.如果我删除"事件"主控制器,那么异常仍然会发生,但命名一个不同的控制器(仍然不是我想要它调用的控制器).
我也尝试过为RenderAction方法提供控制器名称和区域,但是会发生同样的异常.这里发生了什么?
BTW:我使用Autofac作为我的IoC容器
是否可以使用ajax来使用HTMl.RenderAction来提供参数?
我有这样的控制器动作
[ChildActionOnly]
Public ActionResult EmployeeData(string id)
{
Employee employee = new Employee();
//do work to get data
Return PartialView(employee);
}
Run Code Online (Sandbox Code Playgroud)
局部视图只是一个包含一些员工数据(名称,地址等)的小表
然后我有一个页面,其中包含员工下拉列表,其中数据字段是EmployeeData所需的ID(字符串ID)
我想使用ajax,因此当从下拉列表中选择员工时,EmployeeData部分视图将显示在其下方而不刷新页面.如果选择了另一名员工,则再次.
虽然我不知道如何做到这一点,如果可能的话.
正如我在这里推荐的那样.(请不要介意这不是我上面提到的员工数据示例,数据在数据库中没有准备好,我有多个区域可以做同样的事情所以我决定今天就这个工作)
在我看来,这是我的JS
$("#repList").change(function () {
var id = $("#repList").val();
$.ajax({
url: '/Reporting/GetSalesTargets/' + id,
success: function (result) {
$("#partialdiv").html(result);
},
error: function () {
alert("error");
}
});
});
Run Code Online (Sandbox Code Playgroud)
我正在进入将返回视图的控制器操作,这是它.
public ActionResult GetSalesTargets(string id)
{
int month = DateTime.Now.Month;
SalesMarketingReportingService mktSrv = new SalesMarketingReportingService();
SalesTargetModel model = mktSrv.GetRSMSalesTargetModel(id, month);
return PartialView(model);
}
Run Code Online (Sandbox Code Playgroud) 我正在努力渲染渲染,问题是它在我的控制器上调用了错误的动作方法.
在我的"用户"控制器上有两种叫做edit的动作方法,一种用于get,一种用于post请求:
public virtual ActionResult Edit(int id)
{
//return a view for editing the user
}
[AcceptVerbs(HttpVerbs.Post)]
public virtual ActionResult Edit(UserViewModel model)
{
//modify the user...
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我将Renderaction称为如下:
Html.RenderAction("Edit", "Users", new { id = 666});
Run Code Online (Sandbox Code Playgroud)
现在的问题是我想要渲染GET动作方法.但是(也许是因为模型还包含一个名为ID的属性?),Renderaction会调用我的POST操作方法.
这样做的正确方法是什么?我正在使用ASP.NET MVC 3 RC以防万一.
谢谢,
阿德里安
我可以很容易地重定向,但我想在验证失败时渲染编辑页面,所以我将所有验证方法都转移到表单中.我不确定如何使用active_admin呈现编辑操作.
如果我尝试render :action => 'edit'我得到一个模板缺少页面我也试过render active_admin_template('edit.html.arb'),它给了我一个页面内的页面,但没有错误.
有任何想法吗?
member_action :state do
space = Space.find(params[:id])
if space.send(params[:state])
#space.send(params[:state]+"!")
flash[:notice] = "State Changed!"
redirect_to :action => :index
else
#render :action => 'edit'
#render active_admin_template('edit.html.arb')
flash[:error] = "#{space.errors}"
redirect_to :action => :edit
end
end
Run Code Online (Sandbox Code Playgroud) validation ruby-on-rails renderaction ruby-on-rails-3 activeadmin
在ASP.NET MVC中,有什么区别:
Html.Partial and Html.RenderPartial
Html.Action and Html.RenderAction
Run Code Online (Sandbox Code Playgroud) 我的设置:
/Pages/Details/2<% Html.RenderAction("CreatePageComment", "Comments"); %>呈现注释表单Comments/CreatePageComment/Comments/CreatePageCommentRedirectToAction成功创建注释时返回我的问题:
如果存在验证错误,我应该如何返回/Pages/Detail/1并在评论表单中显示错误?
RedirectToAction,似乎验证是棘手的; 我是否应该使用Post-Redirect-Get模式进行验证错误,而不仅仅是返回?View()它会让我回到显示CreateComment.aspx视图(通过验证,但只是白页上的表单),而不是/Pages/Details/2调用的路径RenderAction.如果应该使用PRG模式,那么我认为我只需要学习如何在使用PRG时进行验证.如果没有 - 对我来说这似乎更好地通过返回处理View()- 然后我不知道如何让用户返回到初始视图,显示表单错误,同时使用RenderAction.
这感觉就像你敲击你的头并同时揉肚子的游戏.我也不擅长那个.我是MVC的新手,所以这可能是问题所在.
我在我的网站上有一些我需要包含在起始页面上的观点.但是,只使用Html.Renderaction呈现母版页和整个shebang.
我将如何只渲染内容?
当我有一个可以RenderAction打电话的视图时,我没有在Fiddler中看到任何额外的请求.是因为它不是一个单独的Web请求,例如,当控制器呈现其视图时,它是在内部完成的吗?
我有div在我的页面上呈现图像库
<div id="gallery">
@{
Html.RenderAction("UserGallery");
}
Run Code Online (Sandbox Code Playgroud)
我有这个功能,它在成功上传新图像时运行
function filesUploadOnSuccess(e) {
function updateCart() {
//var tdata = $(frm).serialize();
// or your data in the format that will be used ??
$.ajax({
type: "GET",
//data: tdata,
url : '@Url.Action("UserGallery")',
dataType: "json",
success: function (result) { success(result); }
});
};
}
function success(result) {
$("#gallery").html(result);
}
Run Code Online (Sandbox Code Playgroud)
问题是画廊div没有得到更新.
所以,我正在创建一个管理页面,我想在其上放置多个表单.所以,我尝试使用Partial View和RenderAction来完成它.
我的管理员索引视图:
@model Rad.ViewModels.AdminViewModel
@{
ViewBag.Title = "Admin";
}
<h2>Admin</h2>
<div>
@{ Html.RenderAction("AddProduct"); }
</div>
Run Code Online (Sandbox Code Playgroud)
我的部分观点:
@model Rad.ViewModels.AdminAddProductViewModel
@using (Html.BeginForm("AddProduct", "Admin"))
{
<h1>@Html.LabelFor(model => model.Name)</h1>
@Html.TextBoxFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
<input type="submit" value="Add"/>
}
Run Code Online (Sandbox Code Playgroud)
我的管理控制器:
public class AdminController : Controller
{
//
// GET: /Admin/
public ActionResult Index()
{
return View();
}
public ActionResult AddProduct()
{
return PartialView();
}
[HttpPost]
public ActionResult AddProduct(AdminAddProductViewModel data)
{
if (ModelState.IsValid)
{
}
return View("Index");
}
}
Run Code Online (Sandbox Code Playgroud)
问题在于AddProduct的HttpPost版本.如果我将它保持为返回视图("索引"),它将进入无限循环.但是,如果我返回PartialView(数据),它会正确显示错误,但没有围绕它的索引视图.因此,它只显示部分视图.有没有办法在一个页面上有多个表单并将服务器端验证返回到页面?
forms partial-views renderaction asp.net-mvc-3 asp.net-mvc-4
renderaction ×13
asp.net-mvc ×8
asp.net ×3
ajax ×2
activeadmin ×1
autofac ×1
c# ×1
forms ×1
jquery ×1
partials ×1
razor ×1
validation ×1