문제

문맥
내가 가지고 있다고 말합시다.
레이아웃 사이트에서 마스터 :

<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 게시물을 수행하지 않고는 할 수 없습니다 (AKA Ajax).

다른 팁

FormCollection을 수락하는 컨트롤러 메소드를 작성하고 귀하의보기에 두 가지 양식이 정의 된 경우, 반환 된 FormCollection은 양식 A 또는 양식 B의 값으로 채워집니다. Formcollection을 검사하고 그 값에 따라 논리를 분기 할 수 있습니다. 당신이 매우 명백한 것을 원한다면 당신은 당신이 선택하는 데 도움이되는 값으로 두 형태로 동일한 숨겨진 변수를 가질 수 있습니다.

그것은 하나의 접근법입니다. 이것을 다루는 몇 가지 방법이 있습니다.

두 가지 간단한 양식이있는 경우이 aproach를 사용할 수 있습니다.

두 개의 다른 부분보기를 만듭니다.

@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