我正在关注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.Net MVC网站.我决定将Web,模型和控制器分离到同一解决方案中的不同项目,而不是将所有内容都放在一个项目中.
引用如下:
Web --- [参考文献] --->控制器--- [参考文献] --->模型
现在我想为HtmlHelper类添加2个自定义方法 - 它们被称为"IncludeScript"和"IncludeStyle".它们各自采用单个字符串参数,并分别生成脚本或链接标记.
我根据网络上的文档创建了一个扩展类,并编写了两个方法并编译了应用程序.
现在,当我进入Public.Master页面(这是我的主要主页,以及我打算使用这些方法的地方之一)时,我可以输入如下代码:
<%= Html.IncludeScript("\js\jquery.js") %>
IntelliSense选择和IncludeScript方法,并向我显示语法.所以我希望一切都能奏效.
但事实并非如此.
一切都编译,但是一旦我运行应用程序,我从Default.aspx.cs的第14行得到以下运行时错误:
c:\\Projects\\PhoneReel\\PhoneReel.Web\\Views\\Shared\\Public.Master(11): error CS0117: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'IncludeScript'
以下是错误发生的代码行:
httpHandler.ProcessRequest(HttpContext.Current);
有什么想法可能会出错吗?
我相信这个问题适用于任何"For"Html助手,但我的具体问题是使用CheckBoxFor ...
我有一个IEnumerable类型的模型,其中权限是一个简单的POCO.这个模型实际上是我创建一个EditorTemplate的更大模型的属性.以下是我的模型的大图:
public class bigmodel
{
public string Title {get; set;}
public string Description {get; set;}
[UIHint("ListRights")]
public IEnumerable<rights> Rights {get;set;}
}
public class rights
{
public bool HasAccess {get; set;}
public string Description {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个名为"ListRights"的editortemplate,我的主视图使用它.例如:<%= Html.EditorFor(m => m.Rights)%>.
在ListRights.ascx中,我想要这样的代码:
<table>
<% foreach(rights access in Model)
{ %>
<tr>
<td>
<%=Html.CheckBoxFor( access ) %>
</td>
<td>
<%=access.Description %>
</td>
</tr>
<% } %>
</table>
Run Code Online (Sandbox Code Playgroud)
我知道CheckBoxFor行不起作用,但我想做一些生成相同结果的东西,就像访问是模型上的属性一样.
在上面的例子中,我希望所有内容都能在帖子上自动查找.
我尝试使用类似于此的代码伪造CheckBox,但它不会自动查找:
<table>
<% for(int i=0; i < Model.Count(); i++)
{ %>
<tr> …Run Code Online (Sandbox Code Playgroud) 是否有一个Html.NameFor功能,它获取name模型项的html属性?
我想在我的Razor视图中使用以下代码:
<input type="text" value="@Model.User.Email" name="@Html.NameFor(x => x.User.Email)">
Run Code Online (Sandbox Code Playgroud) 1)在使用行编辑视图时:
@Html.TextArea(name: "Message", rows: 10, columns: 40)
Run Code Online (Sandbox Code Playgroud)
我在编译时收到此错误:
ERR: "The best overload for 'TextArea' does not have a parameter of type 'rows'"
Run Code Online (Sandbox Code Playgroud)
即使有一个以行和列为参数的签名.
2)所以我尝试使用签名:@ Html.TextArea(字符串名称,对象htmlAttributes)
调用函数如下
@Html.TextArea(name: "Message", new { rows=10, columns=40 }
Run Code Online (Sandbox Code Playgroud)
但我得到另一个错误:
ERR: "Named Argument Specifications must appear after all fixed arguments have been specified"
Run Code Online (Sandbox Code Playgroud)
谁知道为什么以及如何解决它们?
先感谢您!
我正在研究ASP.NET MVC-4 Web应用程序.我在我的action方法中定义了以下内容来构建一个SelectList:
ViewBag.CustomerID = new SelectList(db.CustomerSyncs, "CustomerID", "Name");
Run Code Online (Sandbox Code Playgroud)
然后我在我的DropDownListFor内部渲染我View:
@Html.DropDownListFor(model => model.CustomerID, (SelectList)ViewBag.CustomerID, "please select")
Run Code Online (Sandbox Code Playgroud)
如图所示,我将ViewBag属性命名为等于Model属性名称CustomerID.从我自己的测试中,定义相同的名称不会导致任何问题或冲突,但我应该避免这种情况吗?
asp.net asp.net-mvc html-helper html.dropdownlistfor asp.net-mvc-4
我有一个ASP.NET MVC解决方案,我在ASP.NET MVC项目中有大量的HtmlHelper类,它们获取数据并生成各种html片段以显示在各种页面上.
我现在必须运行一堆预定的工作,其中许多工作会生成电子邮件.我将所有这些工作都移到了解决方案中的一个单独的项目中(称为AdminJob.csproj),但我现在发现我必须生成一些与我在视图页面中具有非常相似的HTML的电子邮件.我试图让管理工作不依赖于ASP.NET MVC项目(因为我希望在需要时将adminjob项目作为命令行运行),我也想避免使用我的ASP.NET MVC项目依赖于AdminJob项目(因为这看起来很奇怪).
有关如何避免在我的ASP.NET MVC项目和AdminJob项目中重复相同的HTML呈现代码的任何建议?
我唯一能想到的是在解决方案中创建另一个名为"ViewHelpers"的项目或类似的东西,并将我的所有HTMLHelpers移动到该项目中,以便我的MVC项目和AdminJob项目都可以引用它.为这段代码创建一个单独的项目似乎有点过分,但我想不出另一个不会产生重复的解决方案.
有什么其他建议可以更好地做到这一点并避免重复吗?
我想知道,是否有可能创建自己的帮助器定义,使用?例如以下创建表单:
using (Html.BeginForm(params))
{
}
Run Code Online (Sandbox Code Playgroud)
我想做那样的自己的帮手.这是一个我想做的简单例子
using(Tablehelper.Begintable(id)
{
<th>content etc<th>
}
Run Code Online (Sandbox Code Playgroud)
这将在我的视图中输出
<table>
<th>content etc<th>
</table>
Run Code Online (Sandbox Code Playgroud)
这可能吗?如果是这样,怎么样?
谢谢
我甚至不确定这是否可行,但我想我会检查是否有办法让这更容易.
首先,我的网站中有一些重复的标记,如下所示:
<div class="module">
<h3>Title</h3>
<div>
<p>Information goes here</p>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我想要做的是将它包装在某种辅助/部分中,以便我可以做这样的事情
@MyHelper("This is my Title") {
<p>Here is my custom markup</p>
}
Run Code Online (Sandbox Code Playgroud)
然后,当它呈现时,它将通过<h3></h3>div中的自定义标记之间的参数注入传入的标题.自定义标记可以是从测试,表单控件到局部视图的任何内容.这是可能的吗?
我尝试重写和自定义@Html.ActionLink,在此方法的一个重载中,参数是:
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper,
string linkText, string actionName);
Run Code Online (Sandbox Code Playgroud)
我想要像上面这样的东西,还需要找到AreaName和ControllerName而不通过参数传递它,我想使用以下内容:
string controller = ViewContext.RouteData.Values["Controller"];
string area = ViewContext.RouteData.DataTokens["Area"];
Run Code Online (Sandbox Code Playgroud)
但错误上升为:
An object reference is required for the non-static field, method, or property
'System.Web.Mvc.ControllerContext.RouteData.get'
Run Code Online (Sandbox Code Playgroud)
显然我使用静态,那你在寻找区域名称和控制器名称的建议是什么HtmlHelpers?
html-helper ×10
asp.net-mvc ×7
razor ×4
asp.net ×2
c# ×2
.net ×1
html-email ×1
static ×1
textarea ×1