Что объем переменные в представлении?

Здесь Вы идете.

SELECT
   column1, 
   column2
FROM
   viewWhatever
WHERE
CASE 
    WHEN @locationType = 'location' AND account_location = @locationID THEN 1
    WHEN @locationType = 'area' AND xxx_location_area = @locationID THEN 1
    WHEN @locationType = 'division' AND xxx_location_division = @locationID THEN 1
    ELSE 0
END = 1
6
задан bcpettifer 22 November 2012 в 17:31
поделиться

2 ответа

Переменные обычно имеют область видимости в представлении, хотя это может сбивать с толку теги. Думайте обо всем представлении как о едином методе, где все, что находится за пределами тегов (и сами теги), является пробелом. Переменная, определенная вне блока в представлении, будет ограничена всем представлением. Переменная, определенная внутри блока (цикл foreach / if then / using), будет привязана к этому блоку. Вы не можете повторно использовать переменную внутри блока, который ранее был определен вне блока.

6
ответ дан 8 December 2019 в 14:45
поделиться

Вот что я заметил в отношении MVC Scope:

Переменная, объявленная в элементе управления содержимым, ограничена только в элементе управления содержимым:

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    ScopeTest
    <%
        string testVar1 = "This is a test.";
     %>
     <%=   
     testVar1
    %>

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>ScopeTest</h2>
The below reference to the testVar1 will cause a parser error, because the variable is out of scope.
<%=testVar1 %>
</asp:Content>

**На странице просмотра без MasterPage переменные, объявленные в элементе управления runat="server", доступны только в этом элементе управления. Переменные, объявленные вне элемента управления runat="server", недоступны для этого элемента управления.

В противном случае объявленные переменные доступны по всей странице.**

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<%
    string strPageScope = "PageScope Variable.";
     %>

<head runat="server">

[HEAD]<br />
    <title>ScopeTest2</title>
    <%
        string strHeadScope = "Head Scope...";        
         %>

         This WORKS: 
         <%=
             strHeadScope %>
             <br />


            ViewData available everywhere:
            <%=
                     ViewData["VDScope"].ToString() 
                %> 

             <br />


           strPageScope is NOT Available BECAUSE THE RUNAT=SERVER:
           <%
               //Response.Write(strPageScope);
               %>

             <br />
             [END OF HEAD]<br />
</head>
<body>
[BODY START]<br />

    strHeadScope NOT AVAILABLE, BECAUSE THE HEAD HAS RUNAT="SERVER" IN IT.
    <%
        //Response.Write(strHeadScope);
     %>
<br />
ViewData is available everywhere:
            <%
                  Response.Write(   ViewData["VDScope"].ToString());
                %> 
            <br />

    <div>
        <%
            string strBodyVar = "Testing Var Declared in Body.";
             %>

    </div>

        <%

            Response.Write(strBodyVar);

            %>

            <br />

            Page Scope works:
            <%=
    strPageScope
    %>
    <br />
    [END BODY] 
</body>
</html>

Код контроллера, в случае любопытства:

public ActionResult ScopeTest() { вернуть View(); }

public ActionResult ScopeTest2()
{

    ViewData["VDScope"] = "ViewDataScope";

    return View();
}
7
ответ дан 8 December 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: