2013-06-29 3 views
0

У меня есть вид, который очень прост. Он содержит некоторый код C#.ошибка CS1513:} ожидается в asp.net mvc 4

@{ 
    ViewBag.Title = "Community"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<div id="req1"> 
    <form> 
    <input id="txt1" type="text" name="txt1" /> 
</form> 
</div> 
<div id="btn1">Send</div> 
<div id="res1"></div> 
@{ 
    public string GetPassage(string strSearch) 
    { 
     using (var c = new System.Net.WebClient()) 
     { 
      string url = "http://www.esvapi.org/v2/rest/passageQuery?key=IP&passage=' + strSearch + '&options=include-passage-references=true"; 
      return c.DownloadString(Server.UrlDecode(url));    
     } 
    } 
} 

Я не знаю, что не так. Сообщение об ошибке:

Source Error: 

Line 117:EndContext("~/Views/Home/Community.cshtml", 236, 9, true); 

Update:

Если я переместил код в контроллер.

public ActionResult Community() 
{ 
    ViewBag.Message = ""; 

    return View(); 
} 

public string GetPassage(string strSearch) 
{ 
    using (var c = new System.Net.WebClient()) 
    { 
     string url = "http://www.esvapi.org/v2/rest/passageQuery?key=IP&passage=" + strSearch + "&options=include-passage-references=true"; 
     return c.DownloadString(Server.UrlDecode(url)); 
    } 
} 

И я хочу, чтобы сделать вызов Ajax, основанный на the example. Как код в javascript?

+0

Это два разных файла. –

+1

Этот код не относится к виду, должен находиться в контроллере или в другом месте. – James

+1

Возможно, это связано с линией, в которой вы строите URL. Вы должны использовать двойные кавычки вместо одиночных кавычек. ''+ strSearch +'' должен быть '' + strSearch + "'. –

ответ

2

View - это не подходящее место для объявления способа. На самом деле весь код, который вы пишете в представлении между @{ и }, запускается в рамках одного и того же метода (не совсем верно, но делает точку). Очевидно, что объявление метода внутри другого метода невозможно в C#, у механизма просмотра просто нет достаточных средств для его перевода в буквальном смысле.

Однако, если вам нужен какой-то метод полезности на вид - вы можете создать делегат и назвать его позже:

@{ 
    ViewBag.Title = "Community"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<div id="req1"> 
    <form> 
    <input id="txt1" type="text" name="txt1" /> 
</form> 
</div> 
<div id="btn1">Send</div> 
<div id="res1"></div> 

@{ 
    Func<string, string> getPassge = strSearch => 
    { 
     using (var c = new System.Net.WebClient()) 
     { 
      string url = "http://www.esvapi.org/v2/rest/passageQuery?key=IP&passage=' + strSearch + '&options=include-passage-references=true"; 
      return c.DownloadString(Server.UrlDecode(url)); 
     } 
    }; 
} 
+0

Хорошо, если я переведу его на контроллер. Как это связано с конкретным ActionResult? –

+0

@Love, поскольку 'GetPassage' возвращает простую строку, самым близким методом ActionResult является' Content'. Однако я сомневаюсь в самой идее превратить этот метод в метод действия. Трудно советовать, что следует делать с помощью этого метода, не зная сценариев его использования. – Andrei

+0

Я хочу сделать вызов ajax, образец находится по адресу http://blog.bobcravens.com/2009/11/ajax-calls-to-asp-net-mvc-action-methods-using-jquery/. В примере есть var url = "/ Monitor/Test/ReverseTheString"; Я не уверен, что это за монитор? –

Смежные вопросы