我有一个类似的模型:
public class myModel
{
public ClassA ObjectA {get; set;}
public ClassB ObjectB {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
在我的主视图中,我有类似这样的标签:
<div id="section1">
<%=Html.EditorFor(m => m.ObjectA)%>
</div>
<div id="section2">
<%=Html.EditorFor(m => m.ObjectB)%>
</div>
Run Code Online (Sandbox Code Playgroud)
ClassA和ClassB都定义了编辑器模板.
我创建了一些JavaScript,它使Ajax调用重新加载section1 div.我希望action方法返回EditorTemplates文件夹中ObjectA,ClassA.ascx的编辑器.
我的Action方法中有以下内容:
public ActionResult GetData(int input)
{
// Process input here and create modelData
return PartialView("ClassA", modelData);
}
Run Code Online (Sandbox Code Playgroud)
这会产生错误,因为它无法找到ClassA视图.
我的解决方案是在Views文件夹中创建一个名为"GetData"的PartialView,然后我的返回呈现GetData视图.GetData视图只有一行代码:
<%=Html.RenderForModel()%>
Run Code Online (Sandbox Code Playgroud)
这确实有效,但我想知道是否有一种方法可以返回动作方法和编辑模板?
我有一个ViewModel,它有一个复杂的对象作为其成员之一.复杂对象有4个属性(所有字符串).我正在尝试创建一个可重用的局部视图,我可以在其中传递复杂对象并让它为其属性生成带有html帮助器的html.这一切都很有效.但是,当我提交表单时,模型绑定器不会将值映射回ViewModel的成员,因此我不会在服务器端返回任何内容.如何读取用户在复杂对象的html帮助器中键入的值.
视图模型
public class MyViewModel
{
public string SomeProperty { get; set; }
public MyComplexModel ComplexModel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
MyComplexModel
public class MyComplexModel
{
public int id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
....
}
Run Code Online (Sandbox Code Playgroud)
调节器
public class MyController : Controller
{
public ActionResult Index()
{
MyViewModel model = new MyViewModel();
model.ComplexModel = new MyComplexModel();
model.ComplexModel.id = 15;
return View(model);
}
[HttpPost]
public ActionResult Index(MyViewModel model) …Run Code Online (Sandbox Code Playgroud) 我目前正在为ASP.NET MVC中的网站构建Admin后端.
在ASP.NET MVC应用程序中,我开始使用'EditorFor'辅助方法,如下所示:
<div id="content-edit" class="data-form">
<p>
<%= Html.LabelFor(c => c.Title) %>
<%= Html.TextBoxFor(c => c.Title)%>
</p>
<p>
<%= Html.LabelFor(c => c.Biography) %>
<%= Html.EditorFor(c => c. Biography)%>
</p>
</div>
Run Code Online (Sandbox Code Playgroud)
在模型中,"传记"字段已经用以下内容进行了装饰:[UIHelper("Html")].
我有一个'Html'局部视图(在Views/Shared/EditorTemplates下):
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.XML.Linq.XElement>" %>
<textarea class="html">
<%= Model.ToString() %>
</textarea>
Run Code Online (Sandbox Code Playgroud)
现在我想将'textarea'的'ID'属性设置为字段的名称,如下所示:
<textarea id="Biography" class="html">
...
</textarea>
Run Code Online (Sandbox Code Playgroud)
但是我无法通过当前的设置看到这样做的方法.
我能想到的只是创建一个'Html'ViewModel,它包含'Value'属性和'ControlID'属性.
但是如果我基于这个视图,而不是'System.XML.Linq.XElement',它将不再与'EditorFor'辅助方法兼容,我必须手动完成所有操作.
有没有人有类似的问题呢?
我正在尝试在acsx文件中使用Html.RenderPartial,我收到一个错误:
编译器错误消息:CS1973:'System.Web.Mvc.HtmlHelper'没有名为'RenderPartial'的适用方法,但似乎有一个名称的扩展方法.无法动态分派扩展方法.考虑转换动态参数或调用扩展方法而不使用扩展方法语法
<a href="/projects/<%=project.Id %>">
<% Html.Label("fdf"); %>
<% Html.RenderPartial("ProjectName", Model.Id); %></a></li>
<%} %>
Run Code Online (Sandbox Code Playgroud)
但是我已经导入了必要的命名空间,所以它不会出错
<% Html.Label("fdf"); %>
Run Code Online (Sandbox Code Playgroud)
有什么方法可以在ascx文件中使用Html.RenderPartial吗?
我有一个POST控制器动作,返回一个局部视图.一切似乎都很容易.但.我使用加载它$.ajax(),将类型设置为html.但是当我的模型验证失败时,我认为我应该抛出模型状态错误的错误.但我的回复总是返回500 Server错误.
如何在不返回Json的情况下报告模型状态错误.我仍然希望返回部分视图,我可以直接附加到某些HTML元素.
我还想避免返回错误局部视图.这看起来像是客户端的成功.让客户端解析结果以查看它是否真正成功容易出错.设计人员可能会更改局部视图输出,仅此一项就会破坏功能.所以我想抛出异常,但是将正确的错误消息返回给ajax客户端.
安永!如何使用模型中的数据刷新部分视图?第一次,当页面加载它正常工作时,但不是当我从Action调用它时.我创建的结构如下:
在我看来的任何地方:
@{ Html.RenderAction("UpdatePoints");}
Run Code Online (Sandbox Code Playgroud)
我的PartialView"UpdatePoints":
<h3>Your points are @ViewBag.points </h3>
Run Code Online (Sandbox Code Playgroud)
在控制器我有:
public ActionResult UpdatePoints()
{
ViewBag.points = _Repository.Points;
return PartialView("UpdatePoints");
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
UPDATE
感谢你的帮助!最后我按照你的建议使用JQuery/AJAX,使用模型传递参数.
所以,在JS中:
$('#divPoints').load('/Schedule/UpdatePoints', UpdatePointsAction);
var points= $('#newpoints').val();
$element.find('PointsDiv').html("You have" + points+ " points");
Run Code Online (Sandbox Code Playgroud)
在控制器中:
var model = _newPoints;
return PartialView(model);
Run Code Online (Sandbox Code Playgroud)
在视图中
<div id="divPoints"></div>
@Html.Hidden("newpoints", Model)
Run Code Online (Sandbox Code Playgroud) 我碰巧检查了我们正在构建的ASP.NET MVC应用程序的性能.我打算将一个局部视图插入循环中,出于好奇,我检查了渲染页面所需的时间.结果并不好.
我需要做更多的结论性调查,但是如果有人有类似的问题或更多的洞察力,这就是我到目前为止所做的.首先,我应该说所有结果和测量都是在多次页面加载后完成的,并且我已经<compilation debug="false">在web.config中设置了.
<my:UserContol runat="server" />)包含相同的局部视图时,额外的60ms就会消失.因此,基于上面的观察,似乎罪魁祸首是BuildManager.CreateInstanceFromVirtualPath方法.也许,这并不意味着多次被召唤.Webforms可能不会使用它; 或者以某种方式使用它只为每个ascx一次?
我有一个视图,使用jQuery从控制器操作加载部分视图.控制器操作使用Authorize属性进行修饰,如果用户在调用该操作被重定向到正确的LogOn页面时超时,则LogOn页面将插入到部分视图已经消失的视图中.
还有另一篇文章在这里描述使用jQuery但遗憾的是它不包含任何代码示例这正是我需要的,因为我不是很熟悉的jQuery(和新的Web开发)的解决方案,我需要得到这个问题的解决我会尽快.
我想要做的就是将用户重定向到正确的LogOn页面,这对我来说非常直接,但到目前为止它似乎并非如此.如果jQuery是要走的路,有人可以发一个代码示例,这真的会帮助我.
谢谢.
authentication asp.net-mvc jquery partial-views authorize-attribute
我已经被困了很长时间来编辑我的模型的子集合,模型的集合变为空.
我终于找到了一个解决方案,但我发现它有点脏:
首先是我的测试数据:
模型对象:
public class ContainerObject
{
public String Title { get; set; }
public List<ContainedObject> ObjectList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
子集合对象:
public class ContainedObject
{
public int Id { get; set; }
public String Text { get; set; }
public Boolean IsSelected { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
生成对象的控制器方法
public ActionResult TestForm()
{
return View(new ContainerObject()
{
Title = "This is a sample title",
ObjectList = new List<ContainedObject>()
{
new ContainedObject(){Id=1, IsSelected = true, Text="ObjectOne"},
new …Run Code Online (Sandbox Code Playgroud) 只是为了区分对话框中使用的视图或foreach循环中使用的视图(客户详细信息)?
partial-views ×10
asp.net-mvc ×8
c# ×3
jquery ×2
.net ×1
ajax ×1
editorfor ×1
model ×1
viewbag ×1