这更像是一个架构师问题,而不是一个需要代码的问题.
我有一个页面,要求我显示特定项目的状态.让我们说,为了简洁起见,有两种状态,即开放和封闭.
当项目打开时,我想显示一个PartialView,向我展示一组细节.如果项目已关闭,我想显示具有不同细节的PartialView.
现在我知道我可以在aspx中进行检查并渲染一个或者另一个,但我正在尝试减少aspx代码中的决策点数量.我相信aspx中应该有最少的实际代码.
此外,还有两个以上的状态,因此"if"语句会堆积起来并变得混乱.
有人解决过这样的问题吗?
我应该创建一个Helper来做到这一点吗?我可以,而且我不确定如何做到这一点,在视图的ActionResult中处理这个?例如,我可以在动作结果中渲染PartialViews并将其作为普通视图的一部分返回吗?
在详细信息视图中,我想显示其他表格中的网格.如何更好地实施?我试图以这种方式做到这一点(错误:不能隐式地将类型'void'转换为'object'):
<%= Html.RenderPartial("~/Views/Appartament/Index.ascx", new { id = Model.blockhouse_id })%>
Run Code Online (Sandbox Code Playgroud)
以下是详细信息视图中的代码:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<testMVC.Models.Blockhouse>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Details</h2>
<p>
blockhouse_id:
<%= Html.Encode(Model.blockhouse_id) %>
</p>
<p>
name:
<%= Html.Encode(Model.name) %>
</p>
<p>
Appartaments:
<%= Html.RenderPartial("~/Views/Appartament/Index.ascx", new { id = Model.blockhouse_id })%>
</p>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
和Index.ascx控制器的代码:
public ActionResult Index(int blockhouse_id)
{
var _appartament = apt.GetBlockAppartaments(blockhouse_id).ToList();
return View("Index", _appartament);
}
Run Code Online (Sandbox Code Playgroud) 我还有一个问题.我有一个包含"添加"链接的视图.每次按下此链接时,都应动态添加部分视图(例如使用jQuery).
我试图通过这种方式做到这一点:
$('#Div1').load('<%= Url.Action( "Video", "ddd", new { id = "1", url="ko" } ) %>');
Run Code Online (Sandbox Code Playgroud)
但是这种方法不添加部分它只是用部分替换 "Div1"的内容.
当我尝试:
$('#Div1').append('<%= Url.Action( "Video", "ddd", new { id = "1", url="ko" } ) %>');
Run Code Online (Sandbox Code Playgroud)
有一些东西添加到我的Div但没有局部视图.只添加局部视图的路径:/de/Market/ddd/Video/1?url=ko
我在控制器中的代码如下所示:
public ActionResult Video(string url, int id)
{
ViewModels.Video v = new Video();
v.URL = url;
v.ID_Video = id;
return PartialView("Video", v);
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决这个问题?(我正在使用MVC2)
我想使用部分视图的jQuery get方法.最好的方法是什么?我读到了jQuery get,对我来说最简单的方法是这段代码:
$.get(@Url.Action('Controller', 'Action'), function () { });
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个部分视图,其作用如下:
当用户未登录时,显示注册表单.
用户登录后,向我显示用户信息.
我有一个部分视图,既可以作为注册表单,也可以作为用户信息卡; 取决于用户是否已登录.
由于这个局部视图必须在网站的任何地方都可见,所以我在MVC3应用程序的_layout区域写了它:
<body>
<div id="wrapper">
<div id="top">
<p id="onlinecount">7890 Personas Jugando</p>
<p id="logoncontrol">ENTRAR | REGISTRARSE</p>
</div>
<div id="headercontainer">
<img src="../../Content/Images/topheadertemp.png" />
</div>
<div id="middle">
<div id="playerinformation">
@Html.Partial("_RegisterPartial") <!-- HERE! -->
</div>
<div id="centerad">
<img src="../../Content/Images/premio.png" />
</div>
<div id="rightad">
<img src="../../Content/Images/ganadores.png" />
</div>
<div class="clear"></div>
</div>
<div id="bottom">@RenderBody()
</div>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
基本上,如果用户没有登录,我需要在该部分中显示一个表单.但是,如果他登录(通过cookie或其他),我应该加载他的信息模型,以显示他的帐户的数据.
这就是我被困的地方.我不知道如何为此用法加载模型.由于这是在_layout中,如果我是正确的,没有控制器对它起作用,不是吗?
有什么建议?
还在学习MVC3,EF.目前我正在连接到MySql,但我认为这不相关.为简单起见,我决定为我的测试应用程序使用一个数据库,并且我已经包含了一个区分数据的类别.例如,我有新闻,事件,信息和页面类别.现在,当在视图中列出内容时,例如在主页上,我想列出最新的5个新闻项目(新闻类别),最新的5个事件(事件类别),欢迎文本(信息类别).我已经能够创建partialViews列出这些在主页的不同部分.但我觉得这样做是错误的,因为在每个PartialViews中,我一遍又一遍地查询同一个表,只是where cat=....在LINQ查询中进行过滤.您能否确认这是否应该是实践,或者有更好的方法来做到这一点.
我有以下部分视图,名为_Categories驻留在〜/ Views/Category/_Categories中:
@model IEnumerable<MyBlogSite.Models.BlogPostCategory>
<ul>
@foreach (var item in Model)
{
<li>@Html.DisplayFor(modelItem => item.Name)</li>
}
</ul>
Run Code Online (Sandbox Code Playgroud)
我在〜/ Views/Blog/Index.cshtml上有以下索引视图:
@model IEnumerable<MyBlogSite.Models.BlogPost>
@{
ViewBag.Title = "Index";
}
@Html.RenderPartial("~/Views/Category/_Categories.cshtml", ---- );
<p>
@Html.ActionLink("New Blog Post", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Title)
</th>
...
Run Code Online (Sandbox Code Playgroud)
在破折号(----)的空间中,我一直试图弄清楚如何传递模型.我不能使用Model.BlogPostCategory,因为它只接受Model.BlogPost.根据我在这里看到的一些帖子,我也尝试过使用小写"m"的"模型".
我在ASP.NET MVC应用程序中工作.该应用程序有一个表单,通过@Ajax.ActionLink这个表单引入,这个表单有一个textarea,我绑定CkEditor.
我有一些特定的要求,包括抓住用户在CKEditor中键入的内容,并按下按钮传递到某个地方.
所以我目前正在做的是将onChange事件绑定到CKEditor,假设我在CKEditor textarea中更改了某些内容,这可以正常工作.
但是,如果用户获取表单,不更改任何内容,然后按下按钮以获取内容该怎么办.它不会起作用,因为我的代码只会在某些内容发生变化后抓取.所以我的问题是,我该如何运行以下内容:
/*
* As the user types the email body insert, this function updates the
* value on the hidden input field on [ form#EmailPreviewForm ] above.
*/
var data = CKEDITOR.instances.emailBody.getData();
$('#emailBodyInsert').val(data);
Run Code Online (Sandbox Code Playgroud)
只有在该CKEditor的完成初始化,否则我得到一个错误说undefined的emailBody; 这是有道理的,因为此时CKEditor尚未初始化.
我的家庭控制器和我的"StatusController"都创建了一个DBEntities的新实例.Home Controller将_db.VMs ViewData.Model返回到_Layout.cshtml视图,状态控制器将_db.Jobs ViewDataModel作为局部视图返回到_GetForStatus.cshtml视图.我将VMs ViewData模型称为_Layout视图,如下所示:
@foreach (var m in ViewData.Model)
{
<li><a href="#">@m.Name</a></li>
}
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,使用DB中的VM名称填充下拉列表._GetforStatus.用于此的Home Controller部分是这样编写的:
public ActionResult index()
{
_db = new IntegrationDBEntitires();
ViewData.Model = _db.VMs.ToList();
return View();
}
Run Code Online (Sandbox Code Playgroud)
StatusController的编写方式如下:
public PartialViewResult _GetforStatus()
{
_db = new OntegrationDBEntities();
ViewData.Model = _db.Jobs.ToList();
return PartialView();
}
Run Code Online (Sandbox Code Playgroud)
_GetforStatus视图的编写方式如下:
@model IntegrationWeb.Models.Job
<div class="progress progress-striped active">
<div class="progress-bar" style="width: @((Model.IS_Progress / Model.IS_Total)*100)%"></div>
</div>
@Html.Action("_GetforStatus", "StatusController")
Run Code Online (Sandbox Code Playgroud)
这在_Layout视图中调用如下:\
@Html.Partial("~/Views/_GetforStatus.cshtml")
Run Code Online (Sandbox Code Playgroud)
我在这里收到错误."传递到字典中的模型项的类型为'System.Collections.Generic.List'1 [IntegrationWeb.models.VM]',但字典需要模型项类型'IntegrationWeb.Models.Job'.看起来好像有将两个不同的DBEntities拉入布局视图是一个冲突.
如何将视图和部分视图返回到ASP.NET MVC 4中的索引布局?
更新:我只是将Action放在Home Controller中,因为我无法弄清楚为什么它找不到我的Controller"StatusController".现在我使用@ {Html.RenderAction("_ GetforStatus")得到了一个不同的错误;}"传入字典的模型项是'System.Collections.Generic.List'1 [IntegrationWeb.models.Job]',但是这个字典需要一个'IntegrationWeb.models.Job'类型的模型项." 有谁知道这里发生了什么?
这是我称局部视图的布局。
这是我出错的代码。
CS0144无法创建抽象类或接口“ IEnumerable”的实例
<div class="fa fa-group">
@Html.Partial("_Comment", new IEnumerable<OnlineTaxiReservationSystem.Models.Comment>)
</div>
Run Code Online (Sandbox Code Playgroud)
这是我的部分观点。
@model IEnumerable<OnlineTaxiReservationSystem.Models.Comment>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.UserComments)
</th>
@*<th>
@Html.DisplayNameFor(model => model.UserId)
</th>*@
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.UserComments)
</td>
@*<td>
@Html.DisplayFor(modelItem => item.UserId)
</td>*@
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.CommentId }) |
@Html.ActionLink("Details", "Details", new { id=item.CommentId }) |
@Html.ActionLink("Delete", "Delete", new { id=item.CommentId })
</td>
</tr>
}
</table>
Run Code Online (Sandbox Code Playgroud) partial-views ×10
asp.net-mvc ×3
c# ×3
javascript ×2
jquery ×2
ajax ×1
architecture ×1
asp.net ×1
ckeditor ×1
model ×1
parameters ×1
razor ×1