簡體   English   中英

將ViewUserControl的屬性綁定到.NET MVC2中的localvariable

[英]Bind property on ViewUserControl to localvariable in .NET MVC2

我想做這樣的事情,其中​​item是.aspx頁中的局部變量:

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

綁定表達式未檢測到本地頁面級變量。 有沒有一種方法,我可以做到這一點wihtout使用的RenderPartial?

您不應在ASP.NET MVC應用程序中使用任何服務器端控件( runat="server" ),因為它們依賴於ViewState和PostBack,這是ASP.NET MVC中不再存在的概念。 唯一的例外是webforms視圖引擎使用<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>

答案是,確實沒有一個好方法。 您可以使用ViewDataKey屬性來傳遞模型,但是您將無法使用當前ViewDictionary中存在的鍵,因此您將通過此路線將一些內容添加到父視圖中。

如果要設置僅查看屬性,則可以使用自定義HTML幫助程序,但最好嘗試找到Darin所暗示的解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM