如何从操作属性获取视图文本

Posted

技术标签:

【中文标题】如何从操作属性获取视图文本【英文标题】:How can I get view text from action attribute 【发布时间】:2016-12-28 07:16:50 【问题描述】:

我需要从某个动作属性中获取视图文本(不是呈现的 html)。

例如:

View (someview ) text :  Hello @Name @Surname

[ActionFilter]
public SomeViewAction()

    return View(someview,someModel);


public class ActionFilter : IResultFilter

    public void OnResultExecuting(ResultExecutedContext filterContext)
    
        //here I need get text "Hello @Name @Surname"
    

【问题讨论】:

【参考方案1】:

如果你有这样的动作过滤器:

public class ActionFilterAttribute : FilterAttribute, IResultFilter

    public string ViewName  get; set; 

    public void OnResultExecuted(ResultExecutedContext filterContext)
    
        //throw new NotImplementedException();
    

    public void OnResultExecuting(ResultExecutingContext filterContext)
    
        var viewResult = filterContext.Result as ViewResult;
        if(viewResult != null)
        
            var viewName = string.IsNullOrEmpty(ViewName) ? (string.IsNullOrEmpty(viewResult.ViewName) ? filterContext.Controller.ControllerContext.RouteData.Values["action"].ToString() : viewResult.ViewName) : ViewName;
            if(!string.IsNullOrEmpty(viewName))
            
                var viewEngine = ViewEngines.Engines.FindPartialView(filterContext.Controller.ControllerContext, viewName);
                var razorView = viewEngine.View as RazorView;
                if (razorView != null)
                
                    using (var reader = new StreamReader(filterContext.HttpContext.Server.MapPath(razorView.ViewPath)))
                    
                        var markups = reader.ReadToEnd();
                    
                
            
        
    

您将能够在控制器操作中应用过滤器:

    [ActionFilter]
    public ActionResult SomeView()
    
        //var someview = "SomeView";
        var somemodel = default(object);
        return View(somemodel);
    

【讨论】:

这段代码抛出异常,因为 viewResult.ViewName = "" 我认为 您是否使用上述控制器操作进行了测试?我测试过,没有例外。 上面的代码是伪代码,但是如果我们返回View(model),没有指向视图名称,就会出现异常 是的,当然。我们应该将视图名称传递给属性。

以上是关于如何从操作属性获取视图文本的主要内容,如果未能解决你的问题,请参考以下文章

从 Swift (3.1) 表格视图中动态创建的单元格获取有序的文本字段数据

如何从视图中获取文本,而不是 Textview

如何通过在模型类上使用 Display(prompt) 属性在脚手架视图中的 HTML 输入中获取占位符文本

从asp.net mvc的部分视图中的文本框中获取值

如何从视图控制器获取自绘视图中的文本

OnItemClick 如何从列表视图中获取单击项目的文本值