所以,标题应该说明一切.
要在ASP.NET MVC中创建可重用的组件,我们有3个选项(可能是其他我没有提到的):
局部视图:
@Html.Partial(Model.Foo, "SomePartial")
Run Code Online (Sandbox Code Playgroud)
自定义编辑模板:
@Html.EditorFor(model => model.Foo)
Run Code Online (Sandbox Code Playgroud)
自定义显示模板:
@Html.DisplayFor(model => model.Foo)
Run Code Online (Sandbox Code Playgroud)
就实际的View/HTML而言,所有三种实现都是相同的:
@model WebApplications.Models.FooObject
<!-- Bunch of HTML -->
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是 - 你何时/如何决定使用三者中的哪一个?
我真正想要的是在创建问题之前要问自己的问题列表,其答案可用于决定使用哪个模板.
以下是我使用EditorFor/DisplayFor找到的2件更好的东西:
它们在呈现HTML帮助程序时尊重模型层次结构(例如,如果在"Foo"模型上有"Bar"对象,则"Bar"的HTML元素将使用"Foo.Bar.ElementName"呈现,而部分将具有"的ElementName").
更强大,例如,如果你List<T>在ViewModel中有一些东西,你可以使用@Html.DisplayFor(model => model.CollectionOfFoo),而MVC足够聪明,可以看到它是一个集合,并为每个项目渲染单个显示(而不是Partial,这需要一个明确的环).
我也听说DisplayFor呈现了一个"只读"模板,但我不明白 - 我不能在那里扔一个表格吗?
有人能告诉我一些其他原因吗?是否有一个列表/文章比较这三个?
asp.net-mvc asp.net-mvc-partialview editortemplates razor asp.net-mvc-3
我有一个强类型的局部视图,它接受一个ProductImage,当它被渲染时,我还想为它提供一些我在包含页面中动态创建的额外ViewData.如何通过RenderPartial调用将强类型对象和自定义ViewData传递给局部视图?
var index = 0;
foreach (var image in Model.Images.OrderBy(p => p.Order))
{
Html.RenderPartial("ProductImageForm", image); // < Pass 'index' to partial
index++;
}
Run Code Online (Sandbox Code Playgroud) 假设我有这个局部视图:
Your name is <strong>@firstName @lastName</strong>
Run Code Online (Sandbox Code Playgroud)
这可以通过仅限儿童的动作来访问:
[ChildActionOnly]
public ActionResult FullName(string firstName, string lastName)
{
}
Run Code Online (Sandbox Code Playgroud)
我想在另一个视图中使用这个局部视图:
@Html.RenderPartial("FullName")
Run Code Online (Sandbox Code Playgroud)
换句话说,我希望能够将firstName和lastName从视图传递到局部视图.我该怎么办?
model-view-controller asp.net-mvc controller asp.net-mvc-partialview asp.net-mvc-3
我对Web应用程序开发非常陌生,我认为我会从最近的技术开始,所以我正在努力学习asp.net以及MVC框架.对于MVC专业人士来说,这可能是一个非常简单的问题.
我的问题是部分视图是否应该有关联的操作,如果是,那么只要普通页面RenderPartial()在局部视图上使用,是否会调用此操作?
这部分观点让我很困惑......
我想在主视图中加载局部视图...
这是简单的例子......
我正在加载Homecontroller Index操作的Index.cshtml作为主页面.
在index.cshtml我正在创建一个链接
@Html.ActionLink("load partial view","Load","Home")
Run Code Online (Sandbox Code Playgroud)
在HomeController中我添加了一个名为的新Action
public PartialViewResult Load()
{
return PartialView("_LoadView");
}
Run Code Online (Sandbox Code Playgroud)
在_LoadView.cshmtl我只是有一个
<div>
Welcome !!
</div>
Run Code Online (Sandbox Code Playgroud)
但是,当运行项目时,index.cshtml首先渲染并向我显示链接"加载部分视图"...当我点击它时,它转到新页面instade,将欢迎消息从_LoadView.cshtml呈现到index.cshtml .
有什么不对?
注意:我不想通过AJAX加载页面或者不想使用Ajax.ActionLink
我是asp.net MVC的新手,所以请耐心等待.我需要构建一个在多个视图中重复的菜单.什么会更好地服务于目的Html.Action或Html.Partial.
我想在我的mvc项目的每个视图页面上放一个随机图像.所以我创建了一个方法,它返回一个partialView并在共享的Layout页面中调用该方法.
当我尝试使用正确的用户名和密码登录时,此工作正常.使用的是插入的,每个页面都包含一个随机图像.但是当我给出用户名和密码的无效组合时.共享布局页面找不到我想用我调用的控制器,@Html.Action并且实际上应该返回登录视图,并带有错误消息"用户名和密码的无效组合"和当前的随机图像.
的InnerException:
{"在控制器'Project.WebUI.Controllers.HomeController'上找不到公共操作方法'RandomSponsor'."}
我在共享布局中的Html.Action.
@Html.Action("RandomSponsor", "Home")
Run Code Online (Sandbox Code Playgroud)
家庭控制器中的方法.
[HttpGet]
[ChildActionOnly]
public ActionResult RandomSponsor()
{
var model = service.getRandomSponsor();
return PartialView("RandomSponsor", model);
}
Run Code Online (Sandbox Code Playgroud)
getRandomSponsor方法工作正常,这个方法总是返回一个随机字符串值,返回到RandomSponsor.cshtml视图.
RandomSponsor.schtml(仅包含图像字符串)
<img src="~/Content/Images/Advert/@(Model)" alt="a" />
Run Code Online (Sandbox Code Playgroud)
我在网上搜索了这个问题,但没有找到解决方案,有没有人知道这个问题的答案?HttpGet的HttpGet可能会有什么问题吗?
问候.
所以我有一个MVC Asp.net应用程序有问题.基本上,我有一个包含表单的View,其内容绑定到一个对象列表.在这个循环中,它加载PartialView与循环的项目.现在一切正常,直到表格的提交.提交后,控制器将发送一个空对象列表.下面的代码说明了这些问题.
父视图:
@model IEnumerable<PlanCompareViewModel>
@using (Html.BeginForm("ComparePlans", "Plans", FormMethod.Post, new { id = "compareForm" }))
{
<div>
@foreach (var planVM in Model)
{
@Html.Partial("_partialView", planVM)
}
</div>
}
Run Code Online (Sandbox Code Playgroud)
_partialView:
@model PlanCompareViewModel
<div>
@Html.HiddenFor(p => p.PlanID)
@Html.HiddenFor(p => p.CurrentPlan)
@Html.CheckBoxFor(p => p.ShouldCompare)
<input type="submit" value="Compare"/>
</div>
Run Code Online (Sandbox Code Playgroud)
这些是上述代码的类:
PlanViewModel:
public class PlansCompareViewModel
{
public int PlanID { get; set; }
public Plan CurrentPlan { get; set; }
public bool ShouldCompare { get; set; }
public PlansCompareViewModel(Plan plan)
{
ShouldCompare = false;
PlanID …Run Code Online (Sandbox Code Playgroud) 有人会确认ASP.NET MVC中部分视图的最佳位置吗?
我的想法是,如果它是一个全球视图,将在许多地方使用然后共享.
如果它是视图的一部分被包装到局部视图中以使代码读取更容易,那么它应该进入Views/Controller目录
我纠正还是错过了什么?
在MVC3项目中,我有一个带有此代码的"_Layout.vbhtml"文件
<!DOCTYPE html>
<html>
<head>
</head>
<body>
...
<script src="@Url.Content("~/Scripts/jquery-1.8.2.min.js")"></script>
@RenderSection("Scripts", false)
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
然后,我在共享文件夹中有一个部分视图"ValidationScripts.vbhtml"
@Section Scripts
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.fix.js")"></script>
<script src="@Url.Content("~/Scripts/localization/messages_de.js")"></script>
End Section
Run Code Online (Sandbox Code Playgroud)
如果我从这样的视图中调用部分视图...
@ModelType MvcExample.MyModel
@Code
ViewData("Title") = "Test"
End Code
@Html.Partial("ValidationScripts")
<h2>Just a Test</h2>
...
Run Code Online (Sandbox Code Playgroud)
"脚本"部分未在页面上呈现,输出HTML为
<!DOCTYPE html>
<html>
<head>
</head>
<body>
...
<script src="@Url.Content("~/Scripts/jquery-1.8.2.min.js")"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
如何在局部视图中渲染剖面?
asp.net-mvc asp.net-mvc-partialview asp.net-mvc-views razor asp.net-mvc-3