想象一下,我有一个实现名为ISummary的接口的对象列表.此列表中的对象可能具有其他属性,即.
public interface ISummary {
Guid Id {get;set;}
string Title {get;set;}
DateTime Created {get;set;}
}
public class GigSummary: ISummary {
Guid Id {get;set;}
string Title {get;set;}
DateTime Created {get;set;}
string VenueName {get;set}
string Band {get;set;}
}
public class NewsSummary: ISummary {
Guid Id {get;set;}
string Title {get;set;}
DateTime Created {get;set;}
string Author{get;set}
}
Run Code Online (Sandbox Code Playgroud)
我现在将这个Gigs和News Summary对象列表(作为一个ISummary列表)作为模型传递给视图.
我想使用列表中包含的每种类型的不同部分来呈现此列表.
我怎么能这样做ASP.NET MVC?
我有一个关于ASP.Net MVC的问题.
我正在使用Ajax.ActionLink来加载PartialView.
在这个局部视图中是一个我想要调用的javascript函数.
但是我无法弄清楚如何实现这一目标.
我在设置Ajax.ActionLink时尝试使用AjaxOptions {OnSuccess ="functionInPartialView"}但由于某种原因它无法看到Javascript.
编辑:PartialView是JavaScript和Html的混合
我在调用时收到以下异常Html.RenderPartial:
传递到字典中的模型项是'ChildClass'类型,但是这个字典需要一个'ParentClass'类型的模型项.
这两个类与此相关:
public class ChildClass { /* properties */ }
public class ParentClass
{
public ChildClass ChildProperty { get; set; }
/* other properties */
}
Run Code Online (Sandbox Code Playgroud)
我有一个实例ParentClass,其中的价值ChildProperty是null.
我有两个部分视图,ParentView(ViewUserControl<ParentClass>)和ChildView(ViewUserControl<ChildClass>).
在第一个视图中,我有以下...
<% Html.RenderPartial("~/Views/Controls/ChildView.ascx", Model.ChildProperty); %>
Run Code Online (Sandbox Code Playgroud)
这是抛出此帖子顶部列出的异常的行.
如果ChildProperty不为null,我已验证了正确的功能.为什么MVC认为此属性的空值是父类型?
我可以通过添加仅呈现ChildViewif ChildProperty不为null的代码来解决此问题,但是这一半使得查看失败了.
我是MVC的新手,刚刚遇到了我需要一些帮助的场景.
我将简要概述我的场景,好像它是一个我更熟悉的Web窗体应用程序.
我有一个主页,其中列出了最近的10篇博客文章,以及"存档树"(按时间顺序列出年份/月份,以及这些年/月中每个博客条目的链接).
我将此"存档树"创建为用户控件,并在我的主页上输出该用户控件.
我还将此存档树用户控件输出到我的主博客页面的一侧 - 博客页面仅显示一篇博文的详细信息.
我还想在我的Web应用程序中的几个其他页面上重用此存档树控件.
我有一个'PhotoController'控制器,它有一个ActionResult方法,负责获取所选照片博客帖子(id)的详细信息.
我想在我的照片博客页面上包含一个部分视图(存档树,它将呈现多个记录),它将遍历多个照片记录(List<Photo>).
我可以创建一个视图模型,它包含一个'Photo'属性(用于渲染单个照片博客记录详细信息)和一个名为'PhotoArchive'的第二个属性,它是一个List<Photo>.
我对这种方法的关注是,当我在整个网站的某些其他部分重新使用这个"存档树"部分视图时,我不一定想要通过相同的视图模型(包含父视图中的"Photo"和"PhotoArchive"对象.例如,我的主页不需要通过"照片"对象传递到呈现主页的视图,但我仍然想在我的主页上的其余HTML中输出我的"存档树"部分视图.
我期待有一个简单的解决方案,我目前还不知道对MVC这么新.
我正在使用MVC 3与不引人注目的javascript进行客户端验证.
我有一个可以点击的行的表.单击时,我想调出一个动态加载的局部视图.这是代码:
function GetStuff(id) {
$.ajax(
{
url: "Edit/" + id,
success: function (result) {
$("#DivTest").html(result);
}
});
}
Run Code Online (Sandbox Code Playgroud)
这一切都有效.问题是当我尝试使用jquery在partial中保存某些东西时.表单被劫持,如下所示:
$(function () {
$.post($(this).attr("action"),
$(this).serialize(),
function (data) {
alert("test");
});
e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
这一切使得客户端验证不起作用.即使我遗漏了一些必要的值,它也会发布帖子.如果我没有使用ajax发布或者如果部分加载在页面加载(非动态)上,这一切都有效.
我尝试过的:
我试着把这个放在帖子之前:
if($('form').validate().form()){
...
}
Run Code Online (Sandbox Code Playgroud)
这只是每次都返回真实..
从这篇文章我得到2个建议 ASP.NET MVC 2使用jQuery加载局部视图 - 没有客户端验证
添加
Sys.Mvc.FormContext._Application_Load();
Run Code Online (Sandbox Code Playgroud)
部分加载后..并将帖子的数据类型设置为"html".都没有奏效.
我也没试过这个方法:http: //www.deepcode.co.uk/2010/08/mvc-ootb-validation-when-pulling-in.html
这种技术组合是我认为很常见的东西,为什么它很难让它起作用?任何帮助都非常感谢.谢谢
我知道这个问题,但是原始海报接受了一个不涉及嵌套的解决方案。我肯定想嵌套部分视图(当然,除非有更好的方法)。
我有一个页面可以Ajax加载几个局部视图之一,具体取决于用户在主视图中的操作。(这些视图是局部的,因为我的理解是,如果您想从Ajax调用中加载大量其他内容,则需要从调用中返回PartialViewResult。)几个局部视图具有一个公共元素,即下拉菜单,我希望喜欢将自己的部分观点考虑在内。
但这是行不通的。每个局部视图都有一个关联的视图模型,即它们的模型。对于嵌套的部分视图,我想从父视图的视图模型传递单个字段的值(可为null的int)作为嵌套的部分视图的模型。
但是在运行时,我收到一条错误消息,说我的局部视图需要Nullable <int>但收到X,其中X是与父局部视图关联的视图模型的类型。
所以我的问题是双重的:
是否完全不允许嵌套局部视图?(在这种情况下,我希望框架会检查情况并抛出一个如此明确表示的错误。)
除了局部视图之外,是否有办法获得我希望的分解出的公共接口元素的效果?我已经考虑过但没有尝试创建一个编辑模板,因为我认为对于部分视图不起作用的内容对那些视图不起作用,但是我可能是错的。
ETA:我发现了我的问题:当您将模型的空值传递给HtmlHelper.Partial或RenderPartial时,假设您只是没有传递模型,则渲染引擎会代替调用的局部视图的模型来代替该空值。 。
在我的情况下,这是不正确的:我的Nullable <int>是Nullable,因为在设置之前,它为null!null在语义上有意义!
但这就是为什么我遇到问题。
我创建了一个mvc4网络应用程序.用剃刀视图引擎.您知道布局页面和内容页面(主页,联系人,关于等).但是没有引用内容页面的布局.
内容页面不应包括:
Layout = "~/Views/Shared/_Layout.cshtml";
Run Code Online (Sandbox Code Playgroud)
在内容页面中,这段代码丢失了.它们有效.没有布局参考,它如何做到这一点?
我在cshtml页面上有一个部分视图如下: -
@model MvcCommons.ViewModels.CompositeViewModel
@{
ViewBag.Title = "Edit";
}
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Article</legend>
@Html.HiddenFor(model => model.ArticleViewModel.Article.ArticleID)
<div class="editor-label">
@Html.LabelFor(model => model.ArticleViewModel.Article.CategoryID, "Category")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.ArticleViewModel.Article.CategoryID, (SelectList)ViewBag.CategoryID)
@Html.ValidationMessageFor(model => model.ArticleViewModel.Article.CategoryID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ArticleViewModel.Article.ArticleTitle)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ArticleViewModel.Article.ArticleTitle)
@Html.ValidationMessageFor(model => model.ArticleViewModel.Article.ArticleTitle)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ArticleViewModel.Article.ArticleDate)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ArticleViewModel.Article.ArticleDate)
@Html.ValidationMessageFor(model => model.ArticleViewModel.Article.ArticleDate)
</div>
@Html.HiddenFor(model => model.PageViewModel.Page.PageTitle, new { id = "PageTitle" })
@Html.HiddenFor(model => model.PageViewModel.Page.PageAction, new { id …Run Code Online (Sandbox Code Playgroud) 这个问题可能会重复,但我有一些问题.我的页面中有一个下拉列表和搜索按钮.我在更改事件的下拉列表中使用模型绑定视图.当点击搜索按钮时,在下拉列表中选择的关于记录列表的值将在局部视图中显示.这一切都正确完成如下:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<ApricaCRMEvent.Models.CRM.DatabaseEntities.CRM_Doctor_Request>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
MDLNoDDLIndex
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<script src="../../Scripts/jquery.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-migrate-1.0.0.js" type="text/javascript"></script>
<script type="text/javascript">
//script for binding drop down list value from view to model
$("#viewlist").hide();
function TestFun()
{
var mdlno = $("#ddlMDLNo").val();
var txtmdlno = document.getElementById("Request_For_Id");
txtmdlno.value = mdlno;
//alert(txtmdlno.value);
$("#viewlist").hide();
}
var mdlno = $("#ddlMDLNo").val();
function Datalist(mdlno) {
$("#viewlist").show();
$.ajax({
url: "/Search/MDLNoDataList", //url or controller with action
type: "POST",
data: mdlno,
dataType: "html",
success: function (data) …Run Code Online (Sandbox Code Playgroud) 我是第一个MVC项目.我想创建一个带有标题的页面,并在此标题中放置一个带有类别列表的局部视图.
这就是我到目前为止所做的:我创建了母版页(_Home.cshtml).比在共享文件夹中我创建了一个View(Category.cshtml).看我的照片.

我的Category.cshtml内容:
@model IEnumerable<ArtSchool.Models.Category>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Visible)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Visible)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
}
我的主页文件:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>_Home</title> …Run Code Online (Sandbox Code Playgroud) partial-views ×10
asp.net-mvc ×8
jquery ×3
c# ×2
razor ×2
ajax ×1
dynamic ×1
list ×1
validation ×1