我有一个强类型的MVC视图控件,它负责用户可以创建和编辑客户端项目的UI.我希望他们能够定义ClientId
创建,但不能编辑,这将在UI中反映出来.
为此,我有以下几行:
<%= Html.TextBox("Client.ClientId", ViewData.Model.ClientId, new
{ @readonly =
(ViewData.Model.ClientId != null && ViewData.Model.ClientId.Length > 0
? "readonly" : "false")
} )
%>
Run Code Online (Sandbox Code Playgroud)
似乎无论我给readonly属性(甚至"false"和"")赋予什么值,Firefox和IE7都使输入成为只读,这是令人讨厌的反直觉.如果不需要,是否有一个很好的,基于三元运算符的方法来完全删除属性?
我正在设计一个自定义HTML帮助器,我想执行Html.ActionLink来提供动态URL生成.
namespace MagieMVC.Helpers
{
public static class HtmlHelperExtension
{
public static string LinkTable(this HtmlHelper helper, List<Method> items)
{
string result = String.Empty;
foreach (Method m in items)
{
result += String.Format(
"<label class=\"label2\">{0}</label>" +
System.Web.Mvc.Html.ActionLink(...) +
"<br />",
m.Category.Name,m.ID, m.Name);
}
return result;
}
}
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,无论我试图声明的命名空间如何,都无法在此上下文中识别Html.ActionLink.
作为一般性问题,我想知道在设计新的自定义帮助程序时是否可以使用任何现有的标准/自定义Html辅助方法.
谢谢.
我在尝试将自定义HTML5数据属性添加到使用WebGrid帮助器呈现的表时遇到问题.我希望表标签看起来如下:
<table data-test="testdata"><!-- Table Content --></table>
Run Code Online (Sandbox Code Playgroud)
以下是使用Razor视图引擎的示例视图:
@{
var myUser = new
{
Id = 1,
Name = "Test User"
};
var users = new[] { myUser };
var grid = new WebGrid(users);
}
@grid.GetHtml(htmlAttributes: new { data-test = "testdata"})
Run Code Online (Sandbox Code Playgroud)
最后一行将生成"无效的匿名类型成员声明符".错误,因为数据测试中的连字符.
对于其他一些输入HtmlHelpers,您可以使用下划线代替连字符,并且在渲染时它将自动更改为连字符.WebGrid不会发生这种情况.
如果我传入htmlAttributes的字典:
@grid.GetHtml(htmlAttributes: new Dictionary<string, object> {{ "data-test", "testdata"}})
Run Code Online (Sandbox Code Playgroud)
表格如下呈现:
<table Comparer="System.Collections.Generic.GenericEqualityComparer`1[System.String]" Count="1" Keys="System.Collections.Generic.Dictionary`2+KeyCollection[System.String,System.Object]" Values="System.Collections.Generic.Dictionary`2+ValueCollection[System.String,System.Object]"><!-- Table Content --></table>
Run Code Online (Sandbox Code Playgroud)
我做错了什么,我该怎么做才能根据需要渲染属性?
ASP.NET 5中是否存在MvcHtmlString的等效项?否则,我们如何正确地从我的自定义HTMLHelper方法呈现HTML输出?
我理解在ASP.NET MVC中使用HTML帮助程序并扩展它以提供自己的帮助,但我想知道是否使用HTML帮助程序是一个好主意.
我认为ASP.NET MVC的一个好处是可以控制HTML.如果你开始将它隐藏在生成HTML的辅助函数中,你不会开始失去可见性吗?我想当你生成简单的控件(如按钮)时,这不是一个问题,但我已经看到使用html帮助器来创建网格和更复杂的HTML输出.
现在我也明白这样做的原因是为了保持干燥,避免重复.但这里是不是有类似代码隐藏的危险?此外,如果您与设计师合作,该怎么办?通常,设计者会创建标记并应用样式.如果您开始使用生成标记的帮助程序注入视图,这是否会使这种协作变得困难?
我正在努力构建一个帮助器,输出一个由集合的所有成员组成的<'ul>.对于集合中的每个成员,我想打印出一个带有标题的<'li>,以及一个指向CRUD成员的div链接.这与Rails为索引视图的脚手架输出非常相似.
这是我得到的帮手:
def display_all(collection_sym)
collection = collection_sym.to_s.capitalize.singularize.constantize.all
name = collection_sym.to_s.downcase
html = ''
html << "<ul class=\"#{name}-list\">"
for member in collection do
html << content_tag(:li, :id => member.title.gsub(' ', '-').downcase.strip) do
concat content_tag(:h1, member.title, :class => "#{name}-title")
concat link_to 'Edit', "/#{name}/#{member.id}/edit"
concat "\|"
concat link_to 'View', "/#{name}/#{member.id}"
concat "\|"
concat button_to 'Delete', "/#{name}/#{member.id}", :confirm => 'Are you sure? This cannot be undone.', :method => :delete
end
end
html << '</ul>'
return html
end
Run Code Online (Sandbox Code Playgroud)
而那输出正是我想要的.首先,如果有人认为有更好的方法可以做到这一点,请随意纠正我,我怀疑我是以低音方式做到这一点,但此刻它是我知道如何的唯一方式.
然后我尝试将链接包装在div中,如下所示:
def display_all(collection_sym)
collection = collection_sym.to_s.capitalize.singularize.constantize.all …
Run Code Online (Sandbox Code Playgroud) ruby html-helper ruby-on-rails actionviewhelper ruby-on-rails-3
希望对你来说一个简单的问题asp.net mvc gurus:
我有一个复选框,像这样创建:
<%=Html.CheckBox("MyCheckBox", true, new { disabled = "disabled"})%>
Run Code Online (Sandbox Code Playgroud)
在我的行动中,我正在检查这样的值:
bool isChecked = form["MyCheckBox"].Contains("true");
Run Code Online (Sandbox Code Playgroud)
我希望这会返回true,因为它已被检查.但是,创建的隐藏元素具有false值:
<input checked="checked" disabled="disabled" id="MyCheckBox" name="MyCheckBox" type="checkbox" value="true" />
<input name="MyCheckBox" type="hidden" value="false" />
Run Code Online (Sandbox Code Playgroud)
首先,有没有办法让HtmlHelper表现得像我预期的那样?或者是手动构建输入/创建自己的帮助方法的唯一方法?(不是说这是一个大问题......)
其次,任何人都可以解释为什么复选框的行为方式如此?假设一个勾选的禁用复选框应该== true,我是不正确的?禁用状态在语义上是否意味着错误?
好的,我刚刚发现了关于EditorForModel
MVC的内容,我想知道何时应该使用它来代替EditorFor
我的每个属性?为什么当我添加强类型视图时,它不使用它并EditorFor
在每个属性上构建一个?
我迟到了...但感谢您的信息!
我没有看到一个方法来创建,通过HtmlHelper
,一个SelectListItem
是会吐出下面的HTML:
<option disabled="disabled">don't click this</option>
Run Code Online (Sandbox Code Playgroud)
唯一的属性SelectListItem
是:
new SelectListItem{
Name = "don't click this",
Value = string.Empty,
Selected = false
}
Run Code Online (Sandbox Code Playgroud)
我看到的唯一选择是
SelectListItem
以添加Enabled
属性以获取视图的值HtmlHelper
接受我的新扩展EnablableSelectList
并添加我的disabled
属性的新扩展.我在很大程度上理解Lambda查询,但是当我尝试学习MVC,并且我看到默认的Scaffolding模板时,他们使用Lambda表达式来处理这么多组件.
例如,DisplayFor
HTML Helper 就是一个例子.代码去了@Html.DisplayFor(model => model.name)
我希望没有人认为这是一个愚蠢的问题,只是虽然我(我认为)在大多数情况下理解Lambda表达式,但它们并不像常规代码那样"流动",我不得不考虑它很难理解实际发生了什么!
所以问题确实是,
1)对于使用Lambda查询这些HTML帮助程序,我有什么好处吗?
2)据我所知,DisplayFor只会连接到一个项目 - 所以,为什么不是这个@Html.DisplayFor(model.name)
或者类似的?
请提供任何其他可以使MVC新手更好的信息!
html-helper ×10
asp.net-mvc ×7
c# ×2
.net ×1
asp.net-core ×1
attributes ×1
checkbox ×1
lambda ×1
readonly ×1
ruby ×1