Html.RouteLink()HtmlHelper非常适合文本链接.但是链接图像的最佳方式是什么?
我有一个扩展方法,用于验证用户是否能够根据角色查看网页的一部分.
如果我简单地删除内容,这会带给我更多的工作,因为所有丢失的表单在保存时都无法正确注册,我必须通过修改所有代码来处理这种行为,所以我想为什么不只是使用display:none;属性?
我希望有类似的东西:
@using(Html.RoleAccess(currentUser, RoleAccessType.Content_General_Website))
{
...
}
Run Code Online (Sandbox Code Playgroud)
并且这会写如下:
<div class="role_Content_General_Website" style="display:none;">
...
</div>
Run Code Online (Sandbox Code Playgroud)
或者display:block;如果用户有权访问...
我可以创建一个简单的HtmlHelper但如何编写一个也输出结尾</div>?
public static string RoleAccess(
this HtmlHelper helper,
UserInfo user,
RoleAccessType role)
{
return
String.Format(
"<div class='role_{0}' style='display:{1}'>",
role.ToString(), user.HasAccess(role));
}
Run Code Online (Sandbox Code Playgroud) 我刚刚将我的Preview 5应用程序升级到Beta 1,我几乎在那里尝试渲染控件时出现这个错误:
'System.Web.Mvc.HtmlHelper'不包含'RenderPartial'的定义,也没有扩展方法'RenderPartial'接受类型为'System.Web.Mvc.HtmlHelper'的第一个参数'(你是否缺少using指令)或汇编参考?)
我的标记(在.aspx查看内容页面中)是:
<% Html.RenderPartial("Controls/UserForm", ViewData); %>
Run Code Online (Sandbox Code Playgroud)
我尝试过使用Microsoft.Web.Mvc但无济于事.有谁知道Html.RenderPartial去了哪里,或者我可以使用哪种替代方案?
在Html 5中,文本框上有一个名为autofocus的新属性.
问题是它是一个布尔值(有或没有)
它应该看起来像:
<input name="a" value="" autofocus>
Run Code Online (Sandbox Code Playgroud)
我试过了 :
<%= Html.TextBox( "a", null, new { autofocus } ) %>
Run Code Online (Sandbox Code Playgroud)
但是,它给了我一个错误,因为我没有为自动对焦设置值...
我知道我可以手动完成,但我可以使用Html.TextBox吗?
我有一个剃须刀助手方法需要接受一个Func<>将返回一些HTML内容打印输出.这是我原来的:
@helper node(string title, Func<HelperResult> descriptions)
{
....
<div>@descriptions()</div>
....
}
@node("title",
new Func<HelperResult>(() =>
{
return new HelperResult(
@<text>
<span>"desc1"</span>
<span>"desc2"</span>
</text>);
}))
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的文字永远不会打印出来.也没有错误.
所以我学习了内联帮助器,并将调用方法更改为:
@node("title",
@<text>
<span>"desc1"</span>
<span>"desc2"</span>
</text>)
Run Code Online (Sandbox Code Playgroud)
但是现在我收到编译错误说
"委托'System.Func'不接受1个参数".
但我并没有传递任何论点.
因此,如果我将其更改为Func<object,HelperResult>然后使用它调用它@descriptions(null)我得到以下错误:
"如果没有先将lambda表达式转换为委托或表达式树类型,则不能将lambda表达式用作动态调度操作的参数"
我确定我在某处出了点问题,但我不确定它到底是什么.
编辑:我想我可能已经解决了这个问题,但它引入了一些其他问题.
我做的是在传递动态方法之前施放lambda.我猜这就是错误试图说的:
@node("title",
((Func<dynamic, HelperResult>)(@<text>
<span>"desc1"</span>
<span>"desc2"</span>
</text>))
Run Code Online (Sandbox Code Playgroud)
这有效,它可以span正确地打印出标签.不幸的是,在调用它时我必须传入一个无用的参数Func.
现在我的问题是我的真正功能不仅仅是写一些跨度.它更像是这样的:
@node("title",
((Func<dynamic, HelperResult>)(@<text>
<span>@Helpers.Format(resource.Description,"item")</span>
</text>))
Run Code Online (Sandbox Code Playgroud)
哪里@Helpers.Format是另一个助手和资源是从页面模型(动态)变量.
当然现在代码运行但没有打印出来(在<span>标签内).我在我的Format辅助函数中放了一个断点,它命中它并且所有参数都被正确设置,所以我不确定它为什么输出不正确.同样,如果我只是将其更改为resource.Description,那么仍然没有输出.
由于它在这个上下文之外运行良好,我想知道Razor的内联助手不能捕获外部变量吗?
我需要在CSS类之间切换,具体取决于是否读取了消息.
简单来说,应该是这样的:
if (item.status == "Unread")
{
<tr style="font-weight:bold">
...
}
else
{
<tr>
...
}
Run Code Online (Sandbox Code Playgroud)
我虽然无法实现这一目标.能告诉我一件好事吗?我应该使用HTML帮助器吗?
这是到目前为止的完整代码:
@foreach (var item in Model) {
if (item.status == "Unread")
{
<tr style="font-weight:bold">
<td>
@Html.DisplayFor(modelItem => item.timestamp)
</td>
<td>
@Html.DisplayFor(modelItem => item.subject)
</td>
<td>
@Html.DisplayFor(modelItem => item.message_text)
</td>
<td>
@Html.DisplayFor(modelItem => item.status)
</td>
<td>
@Html.DisplayFor(modelItem => item.user_sender.username)
</td>
<td>
@Html.DisplayFor(modelItem => item.user_reciever.username)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.id }) |
@Html.ActionLink("Details", "Details", new { id = item.id }) | …Run Code Online (Sandbox Code Playgroud) 正如问题所说:如何在DropDownListFor Html助手中设置selectedValue?
尝试了大多数其他解决方案,但没有工作,这就是为什么我要开一个新问题.
这些都没有帮助:
@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", 2), htmlAttributes: new { @class = "form-control" })
//Not working with or without cast
@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", (ProjectName.Models.TipDepozita)Model.TipoviDepozita.Single(x => x.Id == 2)), htmlAttributes: new { @class = "form-control" })
@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", (ProjectName.Models.TipDepozita)Model.TipoviDepozita.Where(x => x.Id == 2).FirstOrDefault()), htmlAttributes: new { @class = "form-control" })
@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", new SelectListItem() { Value="2", Selected=true}), htmlAttributes: new { @class = …Run Code Online (Sandbox Code Playgroud) 我正在关注MVC音乐商店教程,但我在第5 部分第5部分中遇到了Html Helper .
到目前为止,我似乎已经正确地遵循它(如果我错了请纠正我:))...但是我收到以下错误:
'musicStoreMVC.Helpers.HtmlHelper':静态类型不能用作参数
这是我的应用程序的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace musicStoreMVC.Helpers
{
public static class HtmlHelper
{
public static string Truncate(this HtmlHelper helper, string input, int length)
{
if (input.Length <= length)
{
return input;
}
else
{
return input.Substring(0, length) + "...";
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人能看到我做错了什么,或者如果需要更多信息,我会很感激指针!谢谢.
当我使用时,我有一个asp mvc 3项目
@Html.TextBoxFor(model => model.Name)
Run Code Online (Sandbox Code Playgroud)
TexBoxFor渲染为
<input id="Name" name="Name" type="text" value="" />
Run Code Online (Sandbox Code Playgroud)
我的模型是"UserModel":
[DisplayName("Name")]
public string Name{ get; set; }
Run Code Online (Sandbox Code Playgroud)
有没有办法在模型中添加模型名称作为前缀?也许有些属性?
我希望文本框呈现为
<input id="UserName" name="UserName" type="text" value="" />
Run Code Online (Sandbox Code Playgroud) 说我有一个枚举:
public enum OrderStatusType
{
Waiting = 0,
Pending,
Picked,
Shipped,
}
Run Code Online (Sandbox Code Playgroud)
我按如下方式生成单选按钮列表.
@Html.RadioButtonFor(m => m.Status, OrderStatusType.Shipped, new {@checked = true})
@Html.RadioButtonFor(m => m.Status, OrderStatusType.Waiting)
Run Code Online (Sandbox Code Playgroud)
但等待总是被选中.输出HTML如下:
input type="radio" value="Shipped" name="Status" id="Status" checked="True"
input type="radio" value="Waiting" name="Status" id="Status" checked="checked"
Run Code Online (Sandbox Code Playgroud)
为什么MVC框架会自动添加"已检查"属性?谢谢.
该模型:
public class OrderViewModel
{
public OrderStatusType Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
风景:
@using WebApplication17.Controllers
@model WebApplication17.Models.OrderViewModel
@{
ViewBag.Title = "Home Page";
}
@Html.RadioButtonFor(m => m.Status, OrderStatusType.Picked)
<span>@OrderStatusType.Picked</span>
@Html.RadioButtonFor(m=>m.Status, OrderStatusType.Pending)
<span>@OrderStatusType.Pending</span>
@Html.RadioButtonFor(m => m.Status, OrderStatusType.Shipped, new {@checked = true})
<span>@OrderStatusType.Shipped</span> …Run Code Online (Sandbox Code Playgroud)