标签: html-helper

静态类型不能用作参数

我正在关注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)

如果有人能看到我做错了什么,或者如果需要更多信息,我会很感激指针!谢谢.

c# asp.net-mvc html-helper

12
推荐指数
1
解决办法
1万
查看次数

为什么我的HtmlHelper扩展不起作用?

我正在建立一个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);

有什么想法可能会出错吗?

asp.net-mvc extension-methods html-helper

11
推荐指数
2
解决办法
8402
查看次数

Foreach on IEnumerable属性和ASP.Net MVC中的CheckBoxFor

我相信这个问题适用于任何"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)

asp.net-mvc html-helper asp.net-mvc-2

11
推荐指数
2
解决办法
2万
查看次数

HtmlHelper NameFor方法

是否有一个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)

asp.net-mvc html-helper razor

11
推荐指数
2
解决办法
5459
查看次数

ASP.NET razor Html.TextArea

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 textarea html-helper

11
推荐指数
2
解决办法
4万
查看次数

ViewBag名称可以与DropDownList中的Model属性名称相同吗?

我正在研究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

11
推荐指数
1
解决办法
1339
查看次数

我应该在ASP.NET MVC项目中将共享HTML生成代码放在哪里?

我有一个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项目都可以引用它.为这段代码创建一个单独的项目似乎有点过分,但我想不出另一个不会产生重复的解决方案.

有什么其他建议可以更好地做到这一点并避免重复吗?

asp.net-mvc html-helper html-email

11
推荐指数
1
解决办法
237
查看次数

使用自己的助手创建?喜欢Html.BeginForm

我想知道,是否有可能创建自己的帮助器定义,使用?例如以下创建表单:

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)

这可能吗?如果是这样,怎么样?

谢谢

.net c# html-helper razor asp.net-mvc-3

10
推荐指数
1
解决办法
3060
查看次数

MVC 3 Razor,自定义标记/部分的助手

我甚至不确定这是否可行,但我想我会检查是否有办法让这更容易.

首先,我的网站中有一些重复的标记,如下所示:

<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-helper razor asp.net-mvc-3

10
推荐指数
2
解决办法
3979
查看次数

使用ASP.NET MVC3在自定义Htmlhelper中查找区域名称和控制器名称

我尝试重写和自定义@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

asp.net-mvc static html-helper razor asp.net-mvc-3

10
推荐指数
1
解决办法
7676
查看次数