我有一个局部视图(控制),用于几个视图页面,我需要传递当前视图的名称回到控制器 – 所以如果有例如。验证错误,我可以重新绘制原来的视图。
一种解决方法是(在控制器方法中)
var viewName = "Details"; // or whatever ViewData["viewName"] = viewName; return(View(viewName,customer));
然后在部分本身,渲染它
<input type="hidden" name="viewName" value="<%=Html.Encode(ViewData["viewName"])%>" />
问题是 – 是否有一些属性或语法我可以使用直接检索这个而不是设置它从控制器?我试过明显:
<input type="hidden" name="viewName" value="<%=Html.Encode(this.Name)%>" />
但这不工作。我在这里失踪了什么?
谢谢。
解决方法
如果你不介意你的代码绑定到你使用的特定视图引擎,你可以看看ViewContext.View属性,并将其转换为WebFormView
var viewPath = ((WebFormView)ViewContext.View).ViewPath;
我相信会得到你的视图名称在结束。
编辑:破解是绝对地点;为了使事情有点整洁我已经包装了逻辑上一个扩展方法,如:
public static class IViewExtensions { public static string GetWebFormViewName(this IView view) { if (view is WebFormView) { string viewUrl = ((WebFormView)view).ViewPath; string viewFileName = viewUrl.Substring(viewUrl.LastIndexOf('/')); string viewFileNameWithoutExtension = Path.GetFileNameWithoutExtension(viewFileName); return (viewFileNameWithoutExtension); } else { throw (new InvalidOperationException("This view is not a WebFormView")); } } }
这似乎做我完全正确的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。