不能在剃刀代码块中的函数代码块访问变量?

时间:2014-10-20 23:51:28

标签: c# asp.net razor

我已经在页面顶部的Razor代码块中初始化了一些变量,如下所示:

@{    
    var name=string.Empty;
    var email=string.Empty;
    var subject=string.Empty;
    var message=string.Empty;

    SetupValidation();
    HandlePostRequest();
}

在页面底部(在html标签之后......等)我创建了一些函数:

@functions
{
    protected void HandlePostRequest()
    {
        if(IsPost)
        {
            name=Request[Fields.Name];
            email=Request[Fields.Email];
            subject=Request[Fields.Subject];
            message=Request[Fields.Message];

            if(Validation.IsValid())
            {
                using (var rep=new ContactLogRepository("usingClassCode"))
                {
                    rep.Insert(name, email, subject, message);
                }
                Response.Redirect("success.cshtml");
            }
        }
    } 
} 

但在我看来,该函数无法访问上面的变量,因为我收到此错误:

  

“编译器错误消息:CS0103:名称'name'不存在于   当前背景“

但我不知道原因,我看了一个在线视频,它完全在它的工作!有没有人对此有解释?感谢

1 个答案:

答案 0 :(得分:3)

您需要在函数中声明变量,因为它们与顶部块中声明的变量的范围不同。

试试这个:

@functions
{
    protected void HandlePostRequest()
    {
        if(IsPost)
        {
            var name = Request[Fields.Name];
            var email = Request[Fields.Email];
            var subject = Request[Fields.Subject];
            var message = Request[Fields.Message];

            if(Validation.IsValid())
            {
                using (var rep=new ContactLogRepository("usingClassCode"))
                {
                    rep.Insert(name, email, subject, message);
                }
                Response.Redirect("success.cshtml");
            }
        }
    } 
}