![](/img/trans.png)
[英]ASP.Net MVC ViewUserControl with controller using MVC 1.0
[英]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.