Asp.net MVC找不到局部视图
我有两个项目(AccountController和OrderController),一个是控制器,另一个是ApicController。控制器是AccountController,而OrderController是ApicController 我需要访问AccountController的操作(发送帐户确认电子邮件,将视图转换为字符串)。当用户下订单时会发生这种情况,当它检测到用户是新用户时,它会自动注册,然后发送注册确认电子邮件(这是AccountController的责任) 以下是OrderController的摘录Asp.net MVC找不到局部视图,asp.net,asp.net-mvc,controller,asp.net-apicontroller,Asp.net,Asp.net Mvc,Controller,Asp.net Apicontroller,我有两个项目(AccountController和OrderController),一个是控制器,另一个是ApicController。控制器是AccountController,而OrderController是ApicController 我需要访问AccountController的操作(发送帐户确认电子邮件,将视图转换为字符串)。当用户下订单时会发生这种情况,当它检测到用户是新用户时,它会自动注册,然后发送注册确认电子邮件(这是AccountController的责任) 以下是Order
var context = new HttpContextWrapper(System.Web.HttpContext.Current);
var routeData = RouteTable.Routes.GetRouteData(context);
routeData.Values.Add("controller", "Account");
routeData.Values.Add("action", "Register");
var requestContext = new System.Web.Routing.RequestContext(context, routeData);
var controllerContext = new System.Web.Mvc.ControllerContext(requestContext, new AuthenticationController());
await AccountController.SendAddressRegistrationEmail(controllerContext,model);
这是AccountController上的部分
public static async Task SendAddressRegistrationEmail(ControllerContext context, model)
{
var manager = context.HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
var helper = new UrlHelper(context.RequestContext);
//// Generate the token and send it
string encodedEmailToken = HttpUtility.UrlEncode(await manager.GenerateEmailConfirmationTokenAsync(model.ID));
string body = ViewAsString(context, "~/Views/Templates/RegistrationConfirmation.cshtml", new RegistrationConfirmationMessage
{
EmailAddress = user.EmailAddress,
Expiration = expiration,
ConfirmationUrl = helper.Action("ConfirmEmail", "Account", new { userId = model.ID, encodedEmailToken = encodedEmailToken, ReturnUrl = returnUrl }, protocol: context.HttpContext.Request.Url.Scheme, hostName: context.HttpContext.Request.Url.Host)
});
await manager.SendEmailAsync(user.ID, "Confirm your account", body);
}
protected static string ViewAsString<T>(ControllerContext context, string viewName, T model)
{
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(context, viewName);
var viewContext = new ViewContext(context, viewResult.View, new ViewDataDictionary<T>(model), new TempDataDictionary(), sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(context, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
公共静态异步任务SendAddressRegistrationEmail(ControllerContext上下文,模型)
{
var manager=context.HttpContext.GetOwinContext().GetUserManager();
var helper=newurlhelper(context.RequestContext);
////生成令牌并发送它
字符串encodedeMiltoken=HttpUtility.UrlEncode(wait manager.GenerateEmailConfirmationTokenAsync(model.ID));
string body=viewstring(上下文,“~/Views/Templates/RegistrationConfirmation.cshtml”,new RegistrationConfirmation message
{
EmailAddress=user.EmailAddress,
过期=过期,
确认Url=helper.Action(“确认邮件”、“帐户”,新{userId=model.ID,encodedEmailToken=encodedEmailToken,ReturnUrl=ReturnUrl},协议:context.HttpContext.Request.Url.Scheme,主机名:context.HttpContext.Request.Url.Host)
});
wait manager.sendmailasync(user.ID,“确认您的帐户”,body);
}
受保护的静态字符串ViewAsString(ControllerContext上下文、字符串viewName、T模型)
{
使用(var sw=new StringWriter())
{
var viewResult=ViewEngines.Engines.FindPartialView(上下文,viewName);
var viewContext=newviewcontext(context,viewResult.View,newviewdatadictionary(model),newtempdatadictionary(),sw);
viewResult.View.Render(viewContext,sw);
viewResult.ViewEngine.ReleaseView(上下文,viewResult.View);
返回sw.GetStringBuilder().ToString();
}
}
FindPartialView始终返回NULL,部分视图位于(Views/Templates/RegistrationConfirmation.cshtml)上
当我确保控制器上下文是AccountController时,是否遗漏了导致部分视图不可见的内容?或者“上下文”上有需要初始化的内容?是否尝试在共享中添加视图folder@Ravi已尝试将其放在共享文件夹中,但不起作用。两个控制器(apicontroller和controller)位于不同的项目中。