C# 布局页面中的asp.net mvc登录表单(未找到部分视图登录)

C# 布局页面中的asp.net mvc登录表单(未找到部分视图登录),c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,在Asp.net MVC中,我在所有页面的顶部都有一个登录表单(在布局页面中),我将我的登录表单放在一个局部视图中,作为共享文件夹中的登录,如下所示: @model MyProject.ViewModels.LogInModel <div id="popover-head" class="hide">Login</div> <div id="popover-content" class="hide"> @using (Ajax.BeginForm("L

在Asp.net MVC中,我在所有页面的顶部都有一个登录表单(在布局页面中),我将我的登录表单放在一个局部视图中,作为共享文件夹中的登录,如下所示:

@model MyProject.ViewModels.LogInModel
<div id="popover-head" class="hide">Login</div>
<div id="popover-content" class="hide">
    @using (Ajax.BeginForm("LogIn", "Account", new AjaxOptions { UpdateTargetId = "login" }))
    {
        @Html.TextBoxFor(m => m.UserName, new { @class = "input-block-level", placeholder = "username" })    
        @Html.ValidationMessageFor(m => m.UserName)    

        @Html.PasswordFor(m => m.Password, new { @class = "input-block-level", placeholder = "password" })
        @Html.ValidationMessageFor(m => m.Password)

        <input type="submit" name="login" value="login" class="btn btn-primary" />

        @Html.CheckBoxFor(m => m.RememberMe)
        @Html.LabelFor(m => m.RememberMe)
    }
</div>
当ModelState无效时,我在浏览器中遇到此错误:

找不到部分视图“登录”,或者没有视图引擎支持 搜索位置

控制器有什么问题?我如何在这一行的布局页面中返回刚才的登录部分视图

return PartialView(model);

要返回局部视图,需要指定局部视图名称。在您的视图中,您拥有部分as_登录,但在控制器上,您将其保留为默认值,因此它正在寻找登录。尝试将控制器更改为

return PartialView("_LogIn", model);

你必须将你的局部视图命名为你的方法

@Html.Partial(_login)
在控制器上

public ActionResult _login(...)
{
....
return PartialView(model);
}
或者你可以给他们起不同的名字,但你的控制器就是这样

public ActionResult Login(...)
{
... 
return PartialView("_login",model);
}

因为我的_布局页面只有一个模型,如果表单需要验证,我想重定向到同一个页面,所以我在控制器中使用了这一行:

return RedirectToAction("Index", "Home");
而不是返回PartialView作为
返回PartialView(“\u LogIn”,model)


多谢大家。

不完全正确。如果调用中未提供视图的名称,则Razor引擎将默认使用方法名称。但是,通过使用以视图名称作为第一个参数的覆盖,可以轻松返回所需的任何视图。检查@Matt的答案是否正确使用。谢谢,它可以工作,但我的部分视图占据了整个页面,尽管我写了:UpdateTargetId=“login”,为什么?你试过
InsertionMode=InsertionMode.Replace
???同时检查您的标签,您可能有
未关闭您的页面上是否引用了不引人注目的ajax?是的,我引用了它,并在其中以捆绑方式添加了它!我以前没有使用过ajax.beginform,所以不完全确定。我总是在javascript中使用ajax调用。我猜您可能会尝试将“登录”更改为“登录”。如果这不起作用,请查看页面上的源代码,看看它放在哪里,希望您能在那里看到一些有助于索引的内容,当我点击提交时,它会转到/Account/LogIn并以我的部分视图占据整个页面!这里有一个问题看起来和你正在经历的相似。希望这里能有所帮助
public ActionResult Login(...)
{
... 
return PartialView("_login",model);
}
return RedirectToAction("Index", "Home");