Почему пользовательский элемент управления с кодом позади файла не хочет компилироваться под MVC2? - PullRequest
0 голосов
/ 23 марта 2010

У меня есть пользовательский контроль в моем приложении MVC2, помещенном в папку «Содержимое» (он не должен быть представлением, это просто повторно используемая часть приложения).

UserControl1.ascx выглядит так:

<@ Control AutoEventWireup="true" Language="C#" CodeFile="~/Content/UserControl1.ascx.cs" Inherits="MVCDrill.Content.UserControl1" %>

<div runat="server" id="mydiv">
<asp:LinkButton id="lb_text" runat="server"></asp:LinkButton>
</div>

UserControl1.ascx.cs выглядит так:

using System;
using System.Web;
using System.Web.UI;

namespace MVCDrill.Content
{
    public class UserControl1 : UserControl
    {

        public string Text
        {
            get { return this.lb_text.Text; }
            set { this.lb_text.Text = value; }
        }
    }
}

Я почти уверен, что подобные вещи скомпилированы в webforms, но я получаю ошибку компиляции:

'MVCDrill.Content.UserControl1' делает не содержит определения для 'lb_text' и нет метода расширения 'lb_text' принимая первый аргумент типа «MVCDrill.Content.UserControl1» может быть найдены (вы пропускаете использование директива или ссылка на сборку?)

Я что-то упустил? Как это изменить (какая альтернатива) в MVC2?

p.s. Intellisense видит lb_text без проблем. Я пробовал с разными контролями с одинаковым результатом.

1 Ответ

2 голосов
/ 23 марта 2010

«Правильный» способ реализовать функциональность этого типа - это использовать частичное представление в папке Shared view - без кода - и предоставить данные модели представления.

Ex:

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

<div id="mydiv">
    <a href="#" id="lb_text"><%= Model.LinkButtonText %></a>
</div>

<script type="text/javascript">
    $(function() {
         $('#lb_text').click( function() {
             $(this).closest('form').submit();
         });
    });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...