加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

在ASP.NET MVC中检索当前视图名称?

发布时间:2020-12-15 19:29:15 所属栏目:asp.Net 来源:网络整理
导读:我有一个局部视图(控制),用于几个视图页面,我需要传递当前视图的名称回到控制器 – 所以如果有例如。验证错误,我可以重新绘制原来的视图。 一种解决方法是(在控制器方法中) var viewName = "Details"; // or whateverViewData["viewName"] = viewName;ret
我有一个局部视图(控制),用于几个视图页面,我需要传递当前视图的名称回到控制器 – 所以如果有例如。验证错误,我可以重新绘制原来的视图。

一种解决方法是(在控制器方法中)

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"));
        }
    }
}

这似乎做我完全正确的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读