ASP.NET MVC 2 запутался в JavaScript - PullRequest
       15

ASP.NET MVC 2 запутался в JavaScript

0 голосов
/ 30 сентября 2010

Привет, я создаю свое первое приложение MVC 2, и меня очень смущают все примеры, которые я читаю.Я также использую комплект Telerik MVC для их Grid и других подобных элементов управления.

Я прочитал много уроков и посмотрел видео, но не могу понять, где разместить javascript и как обернутьблоки кода в соответствующих тегах.Например, я пытаюсь выполнить задачу связывания Клиента с государством через DropDownList состояний (AZ, CA и т. Д.):

Мой ClientController выглядит следующим образом:

void PopulateStates()
{
    var tempRepo = RepositoryFactory.CreateRepostiory<State>(RepositoryType.Business);
    var states = tempRepo.QueryAll().ToList();
    var svmList = states.Select(s => Mapper.Map<State, StateViewModel>(s));

    ViewData["States"] = svmList;
}

public ActionResult Index()
{
    PopulateStates();
    return View();
}

Index.aspx выглядит следующим образом:

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

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

    <% Html.RenderPartial("ClientGrid"); %>

</asp:Content>

ClientGrid.ascx выглядит следующим образом:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>

<%= Html.Telerik().Grid<ViewModels.ClientViewModel>()
    .Name("ClientGrid")
    .EnableCustomBinding(true)
    .DataKeys(keys =>
    {
        keys.Add(c => c.Id);
    })
    .ToolBar(commands => commands.Insert().ButtonType(GridButtonType.Text))
    .DataBinding(dataBinding =>
    {
        dataBinding.Ajax()
            .Select("_Select", "Clients", new Telerik.Web.Mvc.GridState())
            .Insert("_Insert", "Clients", new Telerik.Web.Mvc.GridState())
            .Update("_Save", "Clients", new Telerik.Web.Mvc.GridState())
            .Delete("_Delete", "Clients", new Telerik.Web.Mvc.GridState());
    })
    .Columns(columns =>
    {
        columns.Bound(c => c.Id);
            ...

И ClientViewModel.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ViewModels.ClientViewModel>" %>

 <table>
  <tr>
   <td>
    <div class="editor-label">
        <%: Html.LabelFor(model => model.StateName) %>
    </div>
    <div class="editor-field">
        <%: Html.EditorFor(model => model.State) %>
        <%: Html.ValidationMessageFor(model => model.State) %>
    </div>
   </td>
  </tr>
</table>

Инаконец, шаблон редактора /Shared/EditorTemplates/StateViewModel.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ViewModels.StateViewModel>" %>

<%=
    Html.Telerik().DropDownList()
    .Name("DropDownList")
    .BindTo
    (
        ((IEnumerable<ViewModels.StateViewModel>)ViewData["States"])
        .Where(s => s.StateType == "State")
        .Select(s => new SelectListItem
        {
            Text = s.FormattedName,
            Value = s.Id.ToString(),
            Selected = (Model != null) ? (Model.Id == s.Id) : false
        })
    )
%>

В общем, я не понимаю, какая часть заканчивается на клиенте, а какая часть скомпилирована на сервере.Я также очень смущен различными примечаниями для лямбд и / или регистрации событий.

Лямбда-материал убивает меня.Я трачу кучу времени, просто пытаясь выяснить, когда использовать new {} и () => ....

  1. Куда идет JavaScript в этих 3 файлах, и нужны ли мне специальные теги дляэто?
  2. Где я могу использовать тег <% против <%= и <%:?
  3. Почему иногда внутри <% он просит завершить точкой с запятой, как MyFunction();а иногда это просто MyFunction()?

Спасибо!

1 Ответ

0 голосов
/ 30 сентября 2010

Javascript может в значительной степени идти куда угодно, но хорошей идеей будет поместить его в тег <head> вашей главной страницы.На вашей дочерней странице вы можете включить тег <content>, который поместит JavaScript, соответствующий вашей странице, в соответствующее место на главной странице.

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

<asp:Content ID="Content2" ContentPlaceHolderID="HeadContent" runat="server">
    //javascript goes here in <script> tags
</asp:Content>

<% против <%: против <%=

<% используется для вызова функции на вашем сервере и выполнения некоторой обработки, которая не не выводит данные клиенту.<%: используется для вывода строки с использованием html-кодирования для клиента - это полезно для вывода чего-то, что пользователь мог набрать, поскольку они могут включать свой собственный тег <script>, поэтому при выводе вы увидите &lt;script&gt;в исходном коде, и он не будет проанализирован, так как скрипт <%= используется для вывода строки, но не html кодирует строку

точка с запятой используется только когда выне выводить клиенту.(Хотя некоторые редкие функции могут все еще выводиться, но они будут выводить изнутри, а не возвращать строку или mvcstring. Поэтому каждый раз, когда вы используете <% %>, вы добавляете ; в конце.

...