如何在控制器中知道哪个部分视图进行了回调

时间:2014-01-20 12:56:22

标签: c# asp.net-mvc callback devexpress

我有两个具有相同模型的部分视图,我正在使用devexpress回调。 我的问题是,如果我能在我的控制器函数中知道哪个局部视图进行了回调然后再渲染它?或者我需要复制函数并在每个函数中呈现正确的局部视图?

1 个答案:

答案 0 :(得分:1)

只有您传入视图后,您的视图才会返回给您。因此,您应该将您的视图名称传递给隐藏字段容器,作为示例,然后从服务器端读取此值。有人已经回答how to pass view name,我会尝试扩展这个答案。

首先,您需要创建一些视图路径解析扩展

public static class IViewExtensions
{
    public static string GetViewName(this IView view)
    {
        string viewUrl = String.Empty;
        if (view is BuildManagerCompiledView)
        {
            viewUrl = ((BuildManagerCompiledView)view).ViewPath;
        }
        else
        {
            throw new InvalidOperationException("Buld manager is not defined!");
        }

        string viewFileName = viewUrl.Substring(viewUrl.LastIndexOf('/'));
        string viewFileNameWithoutExtension = Path.GetFileNameWithoutExtension(viewFileName);
        return (viewFileNameWithoutExtension);
    }
}

然后将每个视图名称传递到表单容器

@using ViewExtensionNamespace;
<input type="hidden" id="ViewName" name="ViewName" value="@Html.ViewContext.View.GetViewName()" />

从服务器端读取

 name = Request.Params["ViewName"];