繁体   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