从局部视图重定向时在MVC中调用Action

时间:2012-07-31 20:05:29

标签: c# asp.net asp.net-mvc asp.net-mvc-3 razor

我遇到了这个问题,我在其中有一个登录屏幕和一个不同cshtml文件的注册屏幕,但注册视图被称为@ Html.Partial。登录屏幕中的代码如下:

        <div class="panelLogIn left @if (ViewBag.register) { Write("hidden"); }">
        @using (Html.BeginForm()) {
            <div>
                <div class="validationMessage" style="padding-bottom:10px;">@Html.ValidationMessage("loginFailed")</div>
                <div class="field">
                    <span class="textOverField absolute em1-2" style="top:6px;left:4px;">User</span>
                    @Html.TextBoxFor(a => a.UserName, new { @class = "textField" }) <div class="absolute validationMessage">@Html.ValidationMessageFor(u => u.UserName)</div>
                </div>
                <div class="field relative">
                    <span class="textOverField absolute em1-2" style="top:6px;left:4px;">Password</span>
                    @Html.PasswordFor(a => a.Password, new { @class = "textField" }) <div class="absolute validationMessage">@Html.ValidationMessageFor(u => u.Password)</div>
                </div>
                <div class="em0-9" style="margin-bottom: 20px;">
                    <input class="submitButton cursorHand" style="margin-top: 10px;" type="submit" value="Enter" />
                </div>
                <div class="em0-9">
                    <span class="guestLink bold linkBlue underline cursorHand">Register Free</span>
                </div>
            </div>
        }
        </div>
        <div class="panelGuest left @if (!ViewBag.register) { Write("hidden"); }">
            @Html.Partial("RegisterUser", Model.NewUser)
        </div>

注册视图如下:

@using (Html.BeginForm("Register", "Account"))
{
       /* The text boxes and form elements */


    <div class="em0-9" style="margin-bottom:20px;">
        <input class="submitButton cursorHand" style="margin-top:10px;" type="submit" value="Register" />
    </div>
}

基本上,问题是当我尝试注册一个新用户时,它会将我重定向到localhost / Account / Register,当我回到LogIn屏幕(在同一视图中)时,我无法呼叫任何用户除了登记册之外的其他行动。

对此的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

尝试完全指定第一个Html表单的操作,就像您在Partial中所做的那样:

@using (Html.BeginForm("Index", "Account")) {
    //
}

答案 1 :(得分:0)

您应该对resgister有不同的视图。看起来你有一个视图,其中包含登录框(用户名/密码字段)&amp;还有新的用户注册字段。

  

但是注册视图被称为@ Html.Partial

如果您熟悉Web表单编程模型中的用户控件,则Html部分与用户控件有些相似。

因此登录屏幕中的代码只是

<div class="panelLogIn left @if (ViewBag.register) { Write("hidden"); }">
        @using (Html.BeginForm()) {
            <div>
                <div class="validationMessage" style="padding-bottom:10px;">@Html.ValidationMessage("loginFailed")</div>
                <div class="field">
                    <span class="textOverField absolute em1-2" style="top:6px;left:4px;">User</span>
                    @Html.TextBoxFor(a => a.UserName, new { @class = "textField" }) <div class="absolute validationMessage">@Html.ValidationMessageFor(u => u.UserName)</div>
                </div>
                <div class="field relative">
                    <span class="textOverField absolute em1-2" style="top:6px;left:4px;">Password</span>
                    @Html.PasswordFor(a => a.Password, new { @class = "textField" }) <div class="absolute validationMessage">@Html.ValidationMessageFor(u => u.Password)</div>
                </div>
                <div class="em0-9" style="margin-bottom: 20px;">
                    <input class="submitButton cursorHand" style="margin-top: 10px;" type="submit" value="Enter" />
                </div>
                <div class="em0-9">
                    <span class="guestLink bold linkBlue underline cursorHand">Register Free</span>
                </div>
            </div>
        }
        </div>

您可以拥有一个单独的注册视图,您可以在其中包含您的寄存器部分。

希望这有帮助。