我有一个至少有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#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标签,我得到一个NullReferenceException上firstname.是的,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) 我最近将我的网站从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视图引擎中已知且有记录的变化吗?
在我看来,我想从该文件上的特定本地资源访问资源字符串..正如您从网络表单中知道的那样:
(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团队为我们提供了一些智能机制,就像其他一切:)
关于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.js和validate.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) 案例:我有一个使用X类编辑器模板显示的X类项目列表.
问题:如何在编辑器模板内部获取正在处理的项目的索引?
我在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?
我昨天升级到了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?
我有一个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 SomethingCool的HtmlHelper扩展方法.部分javascript输出需要调用用户(程序员) - 提供的函数来做出一些决定.可以认为它类似于您为ajax调用提供的成功或失败功能.
我重复使用相同的部分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!<br/><br/>Body
</p>
Run Code Online (Sandbox Code Playgroud) razor-2 ×10
razor ×6
c# ×4
asp.net-mvc ×3
.net ×2
ajax ×1
arrays ×1
constructor ×1
javascript ×1
localization ×1
razorengine ×1
resx ×1
vb.net ×1
webforms ×1