我想做类似这样的事情,其中item是.aspx页面中的局部变量:
<p:ProgressBar runat="server" Progress="<%#item.Completed/item.Total%>" Width="100" />
绑定表达式未检测到本地页面级别变量。有没有办法可以使用RenderPartial完成 wihtout ?
答案 0 :(得分:1)
您不应在ASP.NET MVC应用程序中使用任何服务器端控件(runat="server"
),因为它们依赖于ASP.NET MVC中不再存在的ViewState和PostBack。唯一的例外是使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>
答案 1 :(得分:0)
答案是,确实没有一个好方法可以做到这一点。您可以使用ViewDataKey属性传递模型,但是您仍然使用当前ViewDictionary中存在的键,因此您将通过此路径向父视图添加一些残差。
如果您想设置仅查看属性,可以使用自定义HTML帮助程序,但最好不要尝试查找Darin提到的解决方法。