标签: razor-2

C#语法通过数组中的构造函数params初始化自定义类/对象?

我有一个至少有4个变量的类,我已经为类创建了一个构造函数,以便我可以使用它进行初始化

MyClass testobj = new MyClass(1234,56789,"test text", "something else", "foo");
Run Code Online (Sandbox Code Playgroud)

工作良好.

然后我有一个这样的数组,我需要在循环中解析,所以我想得到一些静态数据到这个数组.

我的方法是:

MyClass[] testobjlist = new MyClass 
{
     new MyClass(1001,1234,"Text 1", "abcdefghijklm", "ding"),
     new MyClass(1002,2345,"Text xx", "bla bla", "dong"),
     new MyClass(1003,8653,"Text yy", "blah blah even more", "bamm!")
}
Run Code Online (Sandbox Code Playgroud)

但不知怎的,这给了我一个奇怪的错误,我需要额外的} ???

我不知道我是否应该提到这一点,但是我将它用于使用Razor-engine 2的网页.但我认为这是一个普通的C#问题?

我的解决方法是使用一个大小初始化数组,然后通过索引逐个添加元素,但我宁愿优先使用上面的解决方案,因为我可能需要在测试时按顺序上下移动项目,我有很多真实数据中超过3个.

想知道我在上面的代码中缺少什么......?

c# arrays constructor initialization razor-2

17
推荐指数
3
解决办法
5万
查看次数

Razor助手中的奇怪NullRefereneceException

我在C#Web Forms应用程序中使用Razor Helpers .

以下代码在调用时编译并呈现A-OK:

@helper MemberListItem(string firstname, string lastname, string avatarUrl)
{
    <li>
        @firstname @lastname
        @avatarUrl
    </li>
}
Run Code Online (Sandbox Code Playgroud)

输出(两次调用助手):

<li>Bryan Arnold ../../Resources/Images/Placeholders/generic-user-image.jpg</li>
<li>Doug Bland ../../Resources/Images/Placeholders/generic-user-image.jpg</li>
Run Code Online (Sandbox Code Playgroud)

但是,当我改变助手,以便avatarUrl被放置在src一个属性img标签,我得到一个NullReferenceExceptionfirstname.是的,NullReferenceException是的firstname.

以下代码编译但在调用时抛出NRE:

@helper MemberListItem(string firstname, string lastname, string avatarUrl)
{
    <li>
        @firstname @lastname
        <img src="@avatarUrl"/>
    </li>
}
Run Code Online (Sandbox Code Playgroud)

请记住,除了帮助程序中的位置之外,我不会更改任何内容@avatarUrl.

如何显示图像?

更新1: 我也试过包装我的img代码<text></text>(无济于事):

<li>
    @firstname @lastname
    <text>
        <img src="@avatarUrl"/>
    </text>
</li>
Run Code Online (Sandbox Code Playgroud)

更新2: 这是错误:

Object …
Run Code Online (Sandbox Code Playgroud)

c# webforms razor razor-2

16
推荐指数
1
解决办法
2572
查看次数

可以使用"@:@"修复MVC4 Razor中可能发生的突变

我最近将我的网站从ASP.NET MVC3(Razor)升级到MVC4(Razor2),并且在这样做时发现了Razor视图引擎中的一个重大变化.

场景(大大简化)如下所示.

@model IEnumerable<string>

@{ Layout = null; }

<!DOCTYPE html>

<html>
    <body>
        <div>
              @foreach (var x in Model)
              {
                  @string.Format("Foo bar: {0}", x) // Errors in MVC4/Razor2
              }
        </div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这在MVC3/Razor中工作正常,但是在MVC4/Razor2中,该string.Format行会导致以下错误:

"@"字符后面的意外"字符串"关键字.进入代码后,您不需要使用"@"作为"string"之类的结构前缀.

如果删除@,则视图引擎会要求您string.Format使用分号终止该行.然而,ReSharper然后警告(正确地):

不使用纯方法的返回值.

我发现的两个修复是要么使用<text>:

<text>@string.Format("The value {0}", x)</text>
Run Code Online (Sandbox Code Playgroud)

或者使用以下更好奇的方法@:@:

@:@string.Format("The value {0}", x)
Run Code Online (Sandbox Code Playgroud)

这是Razor视图引擎中已知且有记录的变化吗?

razor asp.net-mvc-3 asp.net-mvc-4 razor-2

15
推荐指数
2
解决办法
2835
查看次数

MVC4本地化.从视图中访问resx

在我看来,我想从该文件上的特定本地资源访问资源字符串..正如您从网络表单中知道的那样:

(string)GetLocalResource("Title");
Run Code Online (Sandbox Code Playgroud)

无痛而顺畅.框架处理从文化信息代码扩展(.en-EN.resx)获取的.resx文件.

这是可能的MVC4与Razore视图?如何?

我注意到我可以Custom Tool在.resx文件上设置属性PublicResXFileCodeGenerator.这样我就可以从视图中访问它了.示例:我已经为index.cshtml创建了丹麦语和英语的2个资源文件.就像我在网络表单中一样.这是我希望我能写的(Custom Tool Name属性设置为'ViewResource'):

@ViewResource.Title
Run Code Online (Sandbox Code Playgroud)

巴姆.如果现在的文化是丹麦语,标题将是"Forside",如果是英语,它将是"Home".但相反,我给出的唯一选择是选择一个特定的文件.然后从中选择所需的字符串:

@ViewResource.Index_cshtml_en-EN_resx.Title
Run Code Online (Sandbox Code Playgroud)

那不是动态的.所以我想我可以制作一个以某种方式取代en-EN/da-DK的扩展类.但对于那些"简单"并且已经很好并且易于集成到网络表单中的东西来说,这似乎相当多.必须有另一种方式.当然,mvc团队为我们提供了一些智能机制,就像其他一切:)

localization resx razor asp.net-mvc-4 razor-2

14
推荐指数
3
解决办法
3万
查看次数

MVC4 Ajax.BeginForm没有替换UpdateTargetId

关于Ajax.BeginForm的问题有很多关于使用返回局部视图正确更新目标元素的问题:
mvc4 ajax更新同一页面
ASP.NET MVC 4 - Ajax.BeginForm和html5
MVC 4(razor) - 控制器是返回部分视图但整个页面正在更新
MVC 4 Ajax没有更新页面中的PartialView
但是,所有这些都可以通过手动写出jQuery ajax或包含丢失的javascript文件来回答.

  @using (Ajax.BeginForm("PostcardDetails", new AjaxOptions()
  {
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "details"
  }))
  {
    <div id="PostcardSearchResults">
      @{Html.RenderAction("PostcardSearchResults", Model);}
    </div>
  }
  <div id="details">
  </div>
Run Code Online (Sandbox Code Playgroud)

相关控制器代码:

[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get)]
public ActionResult PostcardSearchResults(PostcardSearchFilter filter)
{
        PostcardSearchResults model = new PostcardSearchResults(filter);
        return PartialView("_PostcardSearchResults", model);
}
Run Code Online (Sandbox Code Playgroud)

在我的布局中,我引用了这些jQuery文件.此外,我已经验证页面正在输出正确的路径,并且它找到了正确的文件.我试着开关的顺序unobtrusive-ajax.min.jsvalidate.min.js,没有成功.

<script type="text/javascript" src="@Url.Content("~/Scripts/globalize.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.9.1.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery-ui-1.10.0.custom.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script> …
Run Code Online (Sandbox Code Playgroud)

c# ajax ajax.beginform asp.net-mvc-4 razor-2

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

如何在编辑器模板中获取序列/数组索引?

案例:我有一个使用X类编辑器模板显示的X类项目列表.

问题:如何在编辑器模板内部获取正在处理的项目的索引?

asp.net-mvc razor asp.net-mvc-4 razor-2

14
推荐指数
4
解决办法
5376
查看次数

使用MVC 4 Futures的MVC 4中强类型ActionLink的语法是什么?

我在Visual Studio 2012中使用了新的MVC 4 Internet应用程序模板.我已经为MVC 4 Futures安装了Nuget包.在我的_Layout.cshtml构建导航菜单中.

这可以工作并构建正确的URL:

@ Html.ActionLink("客户","索引","客户")

这就是我想要的工作,一种强类型的变体:

@Html.ActionLink<CustomersController>(c => c.Index(), "Customers", null)
Run Code Online (Sandbox Code Playgroud)

它感到悲伤的是"不能从方法组中选择方法.你的意思是调用方法吗?",但有些东西告诉我这不是真正的问题.

这会编译并输出正确的HTML,但不能内联:

@{
   var t = Html.ActionLink<CustomersController>(c => c.Index(), "Customers");
   Response.Write(t);
}
Run Code Online (Sandbox Code Playgroud)

如何使用Razor的语法(有或没有Futures)在MVC 4中构建强类型的Action/ActionLink?

.net asp.net-mvc-futures asp.net-mvc-4 razor-2

13
推荐指数
1
解决办法
4551
查看次数

在<link>元素上使用Razor 2编写RSS失败

我昨天升级到了MVC 4,刚刚发现了升级引入的bug.

我有一个用于生成RSS提要的Razor视图.它有一些这样的标记(简化):

<item>
    <title>@post.BlogPost.Title</title> 
    <link>@Url.BlogPost(post.BlogPost, isAbsolute: true)</link>
</item>
Run Code Online (Sandbox Code Playgroud)

在Razor第二版中,对HTML5 void元素特殊支持.这种空白元素是自闭合的,并且没有结束标记.

不幸的是,<link>是一个这样的元素.

这意味着上面的Razor标记不再有效,并且在运行时失败.删除结束</link>标记会删除解析器错误,但意味着它不再是有效的RSS.

那么,有没有办法解决这个问题,或者Razor是否真的适合生成HTML5?

.net asp.net-mvc razor asp.net-mvc-4 razor-2

12
推荐指数
2
解决办法
1425
查看次数

是否可以在ASP.NET MVC4中将输出标记为C#或VB函数作为Javascript?

我有一个HtmlHelper扩展方法,它将javascript回调函数作为参数..例如:

@Html.SomethingCool("containerName", "jsCallbackFunction")

<script type="javascript">
    function jsCallbackFunction(e, i) {
        alert(e.target.name + ' / ' + i);
    }
</script>
Run Code Online (Sandbox Code Playgroud)

如您所见,javascript回调函数名称将传递给HtmlHelper扩展方法.这导致开发人员必须返回文档以确定jsCallbackFunction函数需要哪些参数.

我更喜欢这样的东西:

@Html.SomethingCool("containerName", New SomethingCoolCallbackDelegate(Address Of jsCallbackFunction))

<OutputAsJavascript>
Private Sub jsCallbackFunction(e, i)
    '    SOMETHING goes here.  some kind of html dom calls or ???
End Sub
Run Code Online (Sandbox Code Playgroud)

SomethingCoolCallbackDelegate将提供目标函数的代码契约.然后编译器会在MVC页面上将jsCallbackFunction编译为javascript.

.NET 4/ASP.NET MVC 4/Razor 2中是否有这样的内容?或任何其他可以实现类似的技术?

示例在VB中,但C#中的解决方案也是可以接受的.

澄清:

@gideon:注意jsCallbackFunction两个参数e,和i.但是,HtmlHelper扩展方法只是要求一个字符串(javascript回调函数的名称),并不指示此函数可能采用的参数.我试图解决的问题是双重的.

  • 首先,缺少参数提示.传递代替"javascript回调名称"字符串的.NET委托类型将实现此目的.我愿意接受其他解决方案来实现这一目标.我知道XML注释.它们并不是真正的解决方案.

  • 其次,尝试让页面编程人员使用单一语言.在javascript和VB(或js和C#)之间切换需要(对我来说至少)昂贵的上下文切换.我的大脑没有快速过渡.让我在VB或C#中工作更具生产力和成本效益.因此,能够在.NET语言中编写函数并将其编译为javascript,在ASP.NET MVC/razor视图的上下文中,就是我在这里所追求的.

@TyreeJackson:我会编写一个输出html和javascript SomethingCoolHtmlHelper扩展方法.部分javascript输出需要调用用户(程序员) - 提供的函数来做出一些决定.可以认为它类似于您为ajax调用提供的成功或失败功能.

javascript c# vb.net asp.net-mvc-4 razor-2

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

RazorEngine.Text.RawString不适用于常规MVC局部视图

我重复使用相同的部分RazorEngine电子邮件RazorEngine.Parse,但是当我在常规视图中使用相同的Partial时,它new RazorEngine.Text.RawString不起作用,并且不会忽略HTML.我无法使用,Html.Raw因为RazorEngine无法阅读它.我怎么能绕过这个?

<p>
    @(new RazorEngine.Text.RawString(Model.Body))
</p>
Run Code Online (Sandbox Code Playgroud)

在常规的asp.net mvc razor视图中显示底部标记.

<p>
   Welcome!&lt;br/&gt;&lt;br/&gt;Body
</p>
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc razor razor-2 razorengine

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