HTML Helper语法问题

时间:2017-09-14 10:15:00

标签: html-helper razor-2 asp.net-mvc-5.2

我在几个cshtml页面中有这段代码:

@model bt2.Models.ScheduleWork

@using System.Security.Claims;

@{
    bool Admin = User.IsInRole("Admin");
    var identity = (ClaimsIdentity)User.Identity;
    int Employee_ID = Int32.Parse(identity.FindFirst("DatabaseID").Value);
}

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">

如果我理解正确,我应该能够把它变成一个html助手。但我无法找到正确的语法。

我创建了一个名为bthelper.cshtml的cshtml并将其放在App_Code文件夹

这是我的第一次尝试:

@helper GetUserInfo() {
// Load user info into sever side variables for subsequent use
// Admin (true if an admin user)
// Employee_Id 
@using System.Security.Claims;

@{    
        bool Admin = (User.IsInRole("Admin"));
        var identity = (ClaimsIdentity)User.Identity;
        int Employee_ID = Int32.Parse(identity.FindFirst("DatabaseID").Value);
    }
}

然后我的视图cshtml变成了

@model bt2.Models.ScheduleWork

@bthelper.GetUserInfo()

@using (Html.BeginForm())
{
..........
....

当我跑步时,我得到了

  
    

意外&#34; {&#34;在&#34; @&#34;字符。一旦进入代码块(@if {},@ {}等),你就不需要使用&#34; @ {&#34;切换到代码。

  

在帮助者的@{行突出显示

所以我尝试了下面的所有排列,都带有错误消息

@helper GetUserInfo() {

@using System.Security.Claims;

bool Admin = (User.IsInRole("Admin"));
var identity = (ClaimsIdentity)User.Identity;
int Employee_ID = Int32.Parse(identity.FindFirst("DatabaseID").Value);
}
  
    

意外&#34;使用&#34;关键字&#34; @&#34;字符。一旦进入内部代码,您就不需要像&#34;使用&#34;前缀构造。与&#34; @&#34;。

  

@using行上的错误

@helper GetUserInfo() {

using System.Security.Claims;

bool Admin = (User.IsInRole("Admin"));
var identity = (ClaimsIdentity)User.Identity;
int Employee_ID = Int32.Parse(identity.FindFirst("DatabaseID").Value);
}
  
    

命名空间导入和类型别名不能放在代码块中。他们必须立即关注&#34; @&#34;标记中的字符。建议您将它们放在页面顶部,如下例所示:

         

@using System.Drawing;     @ {       // OK在这里使用页面中System.Drawing的类型     }

  

哦.....根据这个我的原始语法实际上是正确的

有人可以用正确的语法帮助我吗? Razor语法仍然让我困惑。矛盾的错误信息无法提供帮助

0 个答案:

没有答案