我想要做這樣的事情,其中產品在.aspx頁面的局部變量:綁定屬性在.NET MVC2所以LocalVariable
<p:ProgressBar runat="server" Progress="<%#item.Completed/item.Total%>" Width="100" />
綁定表達式沒有檢測到本地頁面級變量。有沒有辦法使用RenderPartial來完成這個而不是?
我想要做這樣的事情,其中產品在.aspx頁面的局部變量:綁定屬性在.NET MVC2所以LocalVariable
<p:ProgressBar runat="server" Progress="<%#item.Completed/item.Total%>" Width="100" />
綁定表達式沒有檢測到本地頁面級變量。有沒有辦法使用RenderPartial來完成這個而不是?
您不應該在ASP.NET MVC應用程序中使用任何服務器端控件(runat="server"
),因爲它們依賴於ViewState和PostBack,它們是ASP.NET MVC中不再存在的概念。 webforms視圖引擎使用<asp:Content>
面板實現母版頁唯一例外。也沒有約束的概念。
在ASP.NET MVC中,你有一個模型,一個控制器和一個視圖。控制器填充某個模型,並將其傳遞給要顯示的視圖。該視圖本身可以使用HTML helpers來生成簡單標記或包含用於更復雜場景的其他部分視圖。
所以,你開始定義模型:
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>
這並不完全回答我的問題。我知道我可以創建一個強類型控件並傳入模型,但我不想這樣做。這是額外的代碼,看起來不太好。我創建了一個帶有代碼的MVC控件,而不是附加模型,我只是想要一種將值填充到這些屬性的乾淨方式,無需傳遞新模型對象,這不是必需的。 – Brian 2011-03-13 19:20:01
@rhooligan,這就是ASP.NET MVC應該如何工作。如果你不喜歡,你仍然有其他經典的ASP.NET WebForms,你可以在這裏使用服務器控件而沒有任何問題。我強烈建議你閱讀這裏的基本教程:http://asp.net/mvc並熟悉這個概念。並且要詳細說明一下關於Width屬性的評論,顯然這不應該成爲視圖模型的一部分:它應該在您的CSS文件中,然後您將爲包含進度條的div指定一個類。 – 2011-03-13 19:38:51
良好的通話。我意識到我可以用CSS解決這種情況,但肯定有一種情況是我比ViewModel更適合在View代碼中處理。話雖如此,我認爲CSS解決方案不如我想要的那麼優雅和可讀。 – Brian 2011-03-13 20:01:54
答案是:確實存在這不是一個好方法。您可以使用ViewDataKey屬性傳入模型,但是您使用當前ViewDictionary中存在的鍵卡住,因此您要通過此路線添加一些cruft到父視圖。
如果您想要設置僅查看屬性,可以使用自定義HTML助手,但可能只是試圖找到一個工作,達林暗示的更好。
爲了詳細說明這一點,我真的不認爲像Width這樣的屬性應該放在模型中。這純粹是查看數據,只與視圖有關。似乎RenderPartial沒有方法在視圖本身上設置屬性。 – Brian 2011-03-13 19:35:59