Привязать свойство ViewUserControl к локальной переменной в .NET MVC2 - PullRequest
0 голосов
/ 13 марта 2011

Я хочу сделать что-то вроде этого, где item является локальной переменной на странице .aspx:

<p:ProgressBar  runat="server" Progress="<%#item.Completed/item.Total%>" Width="100" />

выражение привязки не определяет локальные переменные уровня страницы. Есть ли способ, которым я могу сделать это без с помощью RenderPartial?

Ответы [ 2 ]

1 голос
/ 13 марта 2011

Не следует использовать какие-либо серверные элементы управления (runat="server") в приложении ASP.NET MVC, поскольку они полагаются на ViewState и PostBack, которые больше не существуют в ASP.NET MVC.Единственное исключение составляет <asp:Content> панели, используемые механизмом просмотра веб-форм для реализации главных страниц.Также нет понятия связывания.

В ASP.NET MVC у вас есть модель, контроллер и представление.Контроллер заполняет некоторую модель и передает ее представлению, которое будет показано.Само представление может использовать помощники HTML для создания простой разметки или включать другие частичные представления для более сложных сценариев.

Итак, вы начнете с определения модели:

public class MyViewModel
{
    public double Progress { get; set; }
}

затем у вас есть контроллер, который будет манипулировать этой моделью вида:

public class HomeController: Controller
{
    public ActionResult Index()
    {
        var completed = 5; // get this from somewhere
        var total = 10; // get this from somewhere
        var model = new MyViewModel
        {
            Progress = (1.0 * completed / total)
        }
        return View(model);
    }
}

и, наконец, у вас будет строго типизированное представление для этой модели, в котором будет отображаться разметка:

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<AppName.Models.MyViewModel>" 
%>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>Progress</h2>
    <div><%= Html.DisplayFor(x = x.Progress)</div>
</asp:Content>
0 голосов
/ 13 марта 2011

Ответ на этот вопрос заключается в том, что на самом деле нет хорошего способа сделать это.Вы можете передать модель, используя свойства ViewDataKey, но вы застряли, используя ключи, которые существуют в текущем ViewDictionary, поэтому вы собираетесь добавить некоторую путаницу к родительскому представлению, пройдя этот маршрут.

Если выЕсли вы хотите установить свойства только для просмотра, это может быть возможно с помощью специального помощника HTML, но, возможно, лучше попытаться найти обходной путь, на который намекает Дарин.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...