标签: partial-views

"渲染@collection"有什么作用?

我正在尝试通过查看示例应用程序来更好地学习Rails,并且在查看railscasts.com源代码的这一行时,我注意到它是这样做的:

<div class="episodes">
    <%= render @episodes %>
  </div>
Run Code Online (Sandbox Code Playgroud)

到底发生了什么?为什么渲染函数没有记录?或者是吗?

ruby-on-rails partial-views

2
推荐指数
1
解决办法
1204
查看次数

ASP.Net MVC2自定义模板通过Ajax和模型更新加载

我有一个视图模型,其中包含其他对象的集合.

public ParentViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<ChildViewModel> Child { get; set; } 
}

public ChildViewModel
{
    public int Id { get; set; }
    public string FirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在我的一个视图中,我将ParentViewModel作为模型传递,然后使用

<%: Html.EditorFor(x => x) %>
Run Code Online (Sandbox Code Playgroud)

其中显示Id和Name属性的表单.

当用户单击一个按钮时,我通过Ajax调用一个动作来加载一个局部视图,该视图带有一个Child的集合:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Child>>" %>
<%: Html.EditorFor(x => x) %>
Run Code Online (Sandbox Code Playgroud)

然后使用自定义模板Child显示传入的每个子项的表单.

我遇到的问题是由Child自定义模板创建的表单不使用DefaultModelBinder使用的命名约定.

即字段名称(由Ajax加载时):

[0].FirstName
Run Code Online (Sandbox Code Playgroud)

代替:

Child[0].FirstName
Run Code Online (Sandbox Code Playgroud)

所以我的控制器中的编辑操作:

[HttpPost]
public virtual ActionResult Edit(int id, FormCollection formValues)
{
    ParentViewModel parent …
Run Code Online (Sandbox Code Playgroud)

ajax asp.net-mvc partial-views asp.net-mvc-2

2
推荐指数
1
解决办法
3013
查看次数

asp.net MVC3局部视图结果没有更新EditorFor值

我有一个简单的电子邮件捕获表单作为我的主页的一部分,但是当我返回部分视图时,表单的编辑器的模型值没有得到更新:

该模型

public class Contact 
    {
        [Key]
        public int Id { get; set; }
        [Required]
        public string Email { get; set; }
        [NotMapped]
        public string Message { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

观点

@model TestApp.Models.Contact

@{
    ViewBag.Title = "Home Page";
}

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.form.js")" type="text/javascript"></script>

<script type="text/javascript" >
    $(function () {
        // ajax form post 
        $("#EmailForm").ajaxForm(function (result) {
            $("#EmailForm").html(result); // post results 
        });
    });
</script>
    @using (@Html.BeginForm("SaveEmail", "Home", FormMethod.Post, new { id = "EmailForm" }))
    { …
Run Code Online (Sandbox Code Playgroud)

jquery partial-views asp.net-mvc-3

2
推荐指数
1
解决办法
5993
查看次数

MVC 3 Ajax.beginform提交 - 导致完全回发

嗨,我想尝试使用mvc 3来掌握ajax.beginform.

我有两个表单,一个HTML.BeginForm可以正常工作,一个Ajax.BeginForm在局部视图中.ajax表单的帖子是为模型添加注释.

问题是ajax提交是在主视图中提交包括HTML.BeginForm在内的整个页面而不是用note来执行异步帖子.

谁能看到我做错了什么?

我看了其他问题,并在web.config等中禁用了不显眼的javascript.

视图:

<div id="maincontent">
@using (Html.BeginForm())
{
  @Html.ValidationSummary(true)
  <fieldset>
    <legend>Edit Franchise</legend>
    <div class="editor-label">
      @Html.LabelFor(model => model.Name)
    </div>
    <div class="editor-field">
      @Html.EditorFor(model => model.Name)
      @Html.ValidationMessageFor(model => model.Name)
    </div>
    <div class="editor-label">
      @Html.LabelFor(model => model.FirstLine)
    </div>
    <div class="editor-field">
      @Html.EditorFor(model => model.FirstLine)
      @Html.ValidationMessageFor(model => model.FirstLine)
    </div>
    <div class="editor-label">
      @Html.LabelFor(model => model.SecondLine)
    </div>
    <div class="editor-field">
      @Html.EditorFor(model => model.SecondLine)
      @Html.ValidationMessageFor(model => model.SecondLine)
    </div>
    <div class="editor-label">
      @Html.LabelFor(model => model.City)
    </div>
    <div class="editor-field">
      @Html.EditorFor(model => model.City)
      @Html.ValidationMessageFor(model => model.City)
    </div>
    <div class="editor-label">
      @Html.LabelFor(model => …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc partial-views ajax.beginform asp.net-mvc-3

2
推荐指数
1
解决办法
1万
查看次数

如何在MVC 3中的某个区域渲染主项目中的部分?

我有一个MVC 3 Razor项目.它有一个叫Admin的区域.我在项目的Views/Shared文件夹中具有页面的基本布局(默认情况下).我在主项目中有一个名为Common的控制器.它将负责布局的某些部分,这些部分基于业务逻辑(基于角色的导航等).我有

@Html.Action("Navigation", "Common")

在_layout.cshtml文件中调用.这被设置为渲染导航栏.当我转到管理区域中的路由("admin/somedomainobject/add")时,运行时错误指出以下内容:

"路径控制器"/ admin/somedomainobject/add"未找到或未实现IController."

当我从布局中删除线条时,它存在很好.如果我使用上述语法或以下语法,则会发生错误:

@{Html.RenderAction("Naviation", "Common");}
Run Code Online (Sandbox Code Playgroud)

是因为我在使用区域吗?我是否以错误的方式使用主项目文件夹?

任何想法将不胜感激!

partial-views asp.net-mvc-areas razor asp.net-mvc-3

2
推荐指数
1
解决办法
763
查看次数

MVC3共享布局 - 局部视图

我想在我的共享布局模板中包含一个部分视图.此部分视图也有自己的控制器和模型,例如

_MyPartialView.cs

@model MyModelClass

..一些代码.. @ Model.SomeProperty

PartialController.cs

 public PartialViewResult RenderMyPartial()
    {
        var model = new MyModelClass();
        model.Initialize();
        return PartialView("_MyPartialView", model);
    }
Run Code Online (Sandbox Code Playgroud)

_Layout(共享布局)

@ Html.Action("RenderMyPartial","PartialController")

这里的意图是布局页面将调用PartialController,它将消失并填充模型并返回部分视图,该部分视图将绑定到此模型并在共享布局主模板中呈现.

但是当我运行它时,我收到以下错误:

未找到路径'/ XXX /'的控制器或未实现IController.

我已经环顾四周,但很惊讶这似乎不是一个非常常见的设计模式,并想知道为什么?有任何想法吗?

谢谢邓肯

partial-views asp.net-mvc-3

2
推荐指数
1
解决办法
2947
查看次数

无法将模型传递到布局页面内的局部视图中

我在该布局中有一个布局页面我使用了局部视图,局部视图包含我已经构建的菜单功能,我将菜单拆分为局部视图以确保它易于维护.菜单特意放置在布局中,因为它用于每个页面,但菜单中有条件元素,某些选项仅出现在某些页面上.

我偶然发现了将来会出现什么问题,菜单使用ajax调用来呈现包含内容的部分视图(减少页面加载)我只是在一个包含公司的页面上工作,该公司包含一个联系人列表,单击时的菜单选项应显示联系人列表.我已经在公司模型下加载了联系人列表,但是!我无法从应该呈现联系人列表的新部分视图中访问它,因为菜单是布局页面中包含的部分视图,因此无法接受模型,因此我无法将模型传递到局部视图中我正在尝试加载,因为菜单部分视图位于布局页面中.

这是一个棘手的情况,我显然可以更改布局以呈现一个新的部分来包含菜单,这样我就可以将新的视图模型传递给它,但是我构建的每一个页面都需要引用菜单(这是什么害虫!)我必须在这里遗漏一些东西(考虑到这是我可能的第一个MVC3应用程序).有什么建议?

编辑:我自己更进一步,简而言之,我的布局页面将始终能够访问使用它的页面模型,因此包含菜单的部分视图也可以访问该数据.我在菜单部分视图中编写了一些条件逻辑,用于检查页面,然后根据需要传入数据.

<div class="menu">    
    <ul>
        <li><a href="@Url.Action("Create", "Contact")">New Contact </li>
        <li><a href="@Url.Action("Index", "Contact")">Contact List </a></li>
    </ul>
    @if (Request.Url.PathAndQuery.Contains("/Contact/Details/"))
    {
        <ul>
            <li>@Html.ActionLink("New Activity", "Create", "Activity", new { companyid = 0, contactid = Model.contact.id }, null)</li>
        </ul>
    }
</div>
Run Code Online (Sandbox Code Playgroud)

以上是菜单局部视图的一小部分示例,但包含一个示例,其中为联系人/详细信息页面构建菜单,并且能够传入model.contact.id.它的工作原理是我的菜单和我的布局没有明确地包含模型,但它感觉不是很整洁.

partial-views asp.net-mvc-3

2
推荐指数
1
解决办法
1598
查看次数

从razorview中的foreach局部视图中获取数据

我是MVC3和C#的新手.

这是我目前的模特

@model Reports.ViewModels.ContentViewModel
<div>Total Hours: </div>

foreach (var user in Model.Users.ToList()) {
   @Html.Partial("_DirectReports", user)
}
Run Code Online (Sandbox Code Playgroud)

这工作得很好,然后我在这些局部视图中使用HTML,使用另一个@model呈现我想要的一切.问题是我想将所有数据添加到一起.

我想在foreach之外创建一个var foreach将数据插入var并在foreach完成后返回它,就像这样

@model Reports.ViewModels.ContentViewModel

@{var Total = 0}
foreach (var user in Model.Users.ToList()) {
   @Html.Partial("_DirectReports", user)
   //@Total is assigned a value in the partial view
}

<div>Total Hours: @Total</div>
Run Code Online (Sandbox Code Playgroud)

如果这是可能的那将是伟大的thks

c# partial-views razor asp.net-mvc-3

2
推荐指数
1
解决办法
7234
查看次数

MVC3 - 使用部分视图的多个表单

所以,我正在创建一个管理页面,我想在其上放置多个表单.所以,我尝试使用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

2
推荐指数
1
解决办法
6341
查看次数

MVC 6 VNext如何设置HtmlFieldPrefix?

我的观点分为部分观点.因此,在提交时我的模型没有正确重建.

页面视图显示员工数据,其中Employee.Contactinfo是_contactInfo局部视图的模型,其中还具有部分视图_phoneInfo以呈现具有模型Employee.ContactInfo.PhoneInfo的电话信息.

现在的问题是属性的名称.渲染时的Employee.ContactInfo.PhoneInfo.Contact1名称为"Contact1",因此在提交时模型未正确创建,我获得了Employee的原始数据,但是像ContactInfo这样的复杂类型为null.

我认为解决方案是在渲染局部视图时添加前缀.如何在MVC 6中执行以下操作?

employee.cshtml

@model Employee
<% Html.RenderPartial("_conctactInfo", Model.ContactInfo, new ViewDataDictionary
{
    TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "ContactInfo" }
})
%>
Run Code Online (Sandbox Code Playgroud)

_contactInfo.cshtml

@model ContactInfo
<% Html.RenderPartial("_phoneInfo", Model.PhoneInfo, new ViewDataDictionary
{
    TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "PhoneInfo" }
})
%>
Run Code Online (Sandbox Code Playgroud)

_phoneInfo.cshtml

@model PhoneInfo
<input asp-for="@Model.Contact1" />
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc partial-views asp.net-mvc-partialview asp.net-core-mvc

2
推荐指数
2
解决办法
1615
查看次数