我为我的mvc网站开发了一个简单的机制,通过jquery引入html,然后填充指定的div.一切都很好,看起来很酷.
我的问题是我现在正在我的控制器内部创建html标记(这在VB.net中很容易做到btw)我宁可不要混淆一些关注点.
是否可以使用自定义的"MVC View用户控件"来满足这种需求?我可以创建控件的实例,传入模型数据并渲染为html吗?然后,这将是一个简单的渲染和传递回调用浏览器的问题.
当控制器基于模型呈现视图时,您可以使用索引器从ViewData集合中获取属性(即ViewData ["Property"]).但是,我有一个共享用户控件,我尝试使用以下方法调用:
return View("Message", new { DisplayMessage = "This is a test" });
Run Code Online (Sandbox Code Playgroud)
在我的消息控件上我有这个:
<%= ViewData["DisplayMessage"] %>
Run Code Online (Sandbox Code Playgroud)
我认为这会正确渲染DisplayMessage,但是返回null.经过大量的修补,我终于创建了一个"MessageData"类,以便强烈键入我的用户控件:
public class MessageControl : ViewUserControl<MessageData>
Run Code Online (Sandbox Code Playgroud)
现在这个电话有效:
return View("Message", new MessageData() { DisplayMessage = "This is a test" });
Run Code Online (Sandbox Code Playgroud)
并可以这样显示:
<%= ViewData.Model.DisplayMessage %>
Run Code Online (Sandbox Code Playgroud)
为什么在没有强大地键入用户控件的情况下,不会将DisplayMessage属性添加到ViewData(即ViewData ["DisplayMessage"])集合中?这是设计的吗?ViewData是否包含"DisplayMessage"的键是否有意义?
问题是:当我在页面上放置2个相同类型的控件时,我需要为绑定指定不同的前缀.在这种情况下,在表单不正确之后生成的验证规则.那么如何让客户端验证工作呢?
该页面包含:
<%
Html.RenderPartial(ViewLocations.Shared.PhoneEditPartial, new PhoneViewModel { Phone = person.PhonePhone, Prefix = "PhonePhone" });
Html.RenderPartial(ViewLocations.Shared.PhoneEditPartial, new PhoneViewModel { Phone = person.FaxPhone, Prefix = "FaxPhone" });
%>
Run Code Online (Sandbox Code Playgroud)
控件ViewUserControl <PhoneViewModel>:
<%= Html.TextBox(Model.GetPrefixed("CountryCode"), Model.Phone.CountryCode) %>
<%= Html.ValidationMessage("Phone.CountryCode", new { id = Model.GetPrefixed("CountryCode"), name = Model.GetPrefixed("CountryCode") })%>
Run Code Online (Sandbox Code Playgroud)
其中Model.GetPrefixed("CountryCode")
只返回"FaxPhone.CountryCode"或"PhonePhone.CountryCode"取决于前缀
这是表单后生成的验证规则.它们被复制为字段名"Phone.CountryCode".虽然期望的结果是每个FieldNames"FaxPhone.CountryCode","PhonePhone.CountryCode" alt文本的 2个规则(必需,数量),但是 http://www.freeimagehosting.net/uploads/37fbe720bf.png
这个问题与Asp.Net MVC2客户端验证和重复ID的问题有些重复, 但建议手动生成ID并没有帮助.
假设我想做最简单的数据传递,如下所示:
<% For i = 0 To 10%>
<%Html.RenderPartial("MyUserControl")%>
<% Next%>
Run Code Online (Sandbox Code Playgroud)
我想要做的是将变量i作为参数传递给UserControl,以便它显示一个数字,例如,有边框的div.
这怎么可能?
谢谢
控制器如何知道要返回哪些视图?我认为这是通过命名约定,但我已经看到了实例,例如在Nerd Dinner应用程序中,名称不匹配.我在哪里或如何看到这种映射?谢谢.
我正在使用Microsoft MVC和C#.我创建了一个usercontrol(example.ascx),并在顶部继承System.Web.MVC.ViewUserControl<PostTransferViewModel>
现在,当我的模型名称附加到ViewUserControl时,我得到"名称'模型'在当前上下文中不存在"和"名称'Html'在当前上下文中不存在.如果我<PostTransferViewModel>
从结尾删除了ViewUserControl然后一切正常,但我需要<PostTransferViewModel>
.
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<PostTransferViewModel>" %>
<div class="postTransferTank">
<h2>
Approved Post Transfers</h2>
<% if (Model.ApprovedPostTransfers.Count() == 0)
{ %>
<span class="emptyList">There are currently no approved Post Transfers for this tank.</span><br />
<% } %>
<% else
{ %>
<%=Html.DisplayFor(x => x.ApprovedPostTransfers,"PostTransferList") %>
<% } %>
<br />
<%=Html.ActionLink<PostTransferController>(x => x.NewPostTransfer(), "Enter Post Transfer", new { @class = "create-link" })%>
<br />
<% if (Model.DraftPostTransfers.Count() != 0)
{ %>
<h2>
Draft Post Transfers</h2>
<%=Html.DisplayFor(x …
Run Code Online (Sandbox Code Playgroud) User View Control
没有代码隐藏.那么,我应该在哪里/如何制作events
元素呢?
我想了解MVC中控件的逻辑...
asp.net-mvc ×6
c# ×3
asp.net ×2
client ×1
html ×1
prefixes ×1
validation ×1
vb.net ×1
viewdata ×1
viewmodel ×1