<强>上下文结果 我们说我有:
在布局Site.Master中:

<div class="leftColumn">
    <asp:ContentPlaceHolder ID="MainContent" runat="server" />
</div>
<div class="rightColumn">
    <% Html.RenderPartial("_Login"); %>
    <asp:ContentPlaceHolder ID="SideContent" runat="server" />
</div>

登录partialView看起来像:

<form action="/myApp/Account/Login" method="post">
    <input name="name" />Name<br />
    <input name="password" type="password" />Password<br />
    <button>Login</button>
</form>

是否可以仅更新登录窗口小部件表单,而不是整个内容页面?

有帮助吗?

解决方案

如果您指的是http帖子,则只会通过表单中的提交按钮发起的帖子(也可以通过javascript启动)发布到服务器。

如果您的表单是嵌套的,那么这将不起作用。外部表单将始终发布到服务器。

在下面的示例HTML中,单击第一个表单上的“提交”按钮不会将第二个表单中的值发送到服务器。同样,单击第二个提交按钮不会发布第一个表单中的值。

<html>
...
  <body> 
    <div>

      <form action="/Login/Login" method="post">
        <input type="text" name="username" value="" />
        <input type="text" name="passowrd" value="" />
        <input type="submit" name="login" value="Login" />
      </form>


      <form action="/Login/AdminLogin" method="post">
        <input type="text" name="username" value="" />
        <input type="text" name="passowrd" value="" />
        <input type="submit" name="login" value="Login Admin" />
      </form>
    </div>
</body>
</html>

如果您只想更新/更改其中一个表单部分,那么如果不使用javascript并执行javascript帖子(又名 Ajax )。

其他提示

如果构建一个接受FormCollection的控制器方法,并且您的视图定义了两个表单,则返回的formcollection将填充表单A或表单B中的值。您可以检查formCollection并根据值分支逻辑在其中。如果你想要非常明确,你可以在两种形式中都有相同的隐藏变量,其值可以帮助你做出选择。

这是一种方法。我确定有几种方法可以解决这个问题。

如果你有两个简单的表格,你可以使用这个方法:

您可以创建两个不同的部分视图。

@model CustomerInfoModel
@using (Ajax.BeginForm("CustomerInfo", "Customer", new AjaxOptions { HttpMethod = "Post", OnBegin = "InfoLoading", OnComplete = "InfoCompleted" }, new { id = "info", @class = "form-horizontal" }))
    {
    <input type="text" class="form-control" name="Name" id="Name" value="@Model.Name" />
    <input type="email" class="form-control" name="Email" id="Email"  value="@Model.Email" />
    <button type="submit" id="save-info" class="btn-medium red">Save</button>
    }

@model CustomerPasswordChangeModel
@using (Ajax.BeginForm("CustomerPasswordChange", "Customer", new AjaxOptions { HttpMethod = "Post", OnBegin = "InfoLoading", OnComplete = "InfoCompleted" }, new { id = "change", @class = "form-horizontal" }))
{
<input type="password" class="form-control" name="OldPassword" id="OldPassword"  value="" />
<input type="password" class="form-control" name="NewPassword" id="NewPassword"  value="" />
<button type="submit" id="save-change" class="btn-medium red" autocomplete="off">Save</button>
}

在您的父视图中,

@Html.Partial("CustomerInfo", Model.CustomerInfo)

@Html.Partial("CustomerPasswordChange", Model.CustomerPasswordChange)

在控制器中:

    [HttpPost]
    public ActionResult CustomerInfo([Bind(Include = "Name,Email")] CustomerInfoModel model)
    {
        if (ModelState.IsValid)
            return new Json(new { success=true, message="Updated.", errors=null);

// do you logic

        return new Json(new { success=false, message="", errors=getHtmlContent(ModelState.Values.SelectMany(v => v.Errors).ToList(), "ModelError"));
    }

    [HttpPost]
    public ActionResult CustomerPasswordChange([Bind(Include = "OldPassword,NewPassword")] CustomerPasswordChangeModel model)
    {
        if (ModelState.IsValid)
            return new Json(new { success=true, message="Updated.", errors=null);

// do you logic

        return new Json(new { success=false, message="", errors=getHtmlContent(ModelState.Values.SelectMany(v => v.Errors).ToList(), "ModelError"));
    }

这将做你想做的事。

注意:getHtmlContent方法只是生成要在页面上显示的错误消息。没有什么特别的。如果需要,我可以分享。

你的问题不是很清楚。

但据我所知,答案很可能是肯定的。您可以根据用户输入更新所需内容。

if(pass != true) 
{ 
 ViewData["Message'] = "Hey your login failed!"; Return View("Login") 
}

在ViewPage上

<form action="/tralala/Account/Login" method="post"> 
  <input name="name" />Name<br /> 
  <input name="password" type="password" />Password<br /> 

  <button>Login</button> 
 <div style="color: red"><%=ViewData["Message"] %><div> 
</form>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top