سؤال

السياق
دعونا نقول لدي:
في تخطيط الموقع.الماجستير:

<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>

هل من الممكن تحديث فقط تسجيل الدخول القطعة شكل غير كامل محتوى الصفحة ؟

هل كانت مفيدة؟

المحلول

إذا كنت في اشارة الى post http إلا بعد الشروع (يمكن أيضا أن تبدأ من قبل جافا سكريبت) قبل تقديم زر من داخل النموذج سيتم نشرها إلى الخادم.

إذا كان لديك أشكال متداخلة ثم هذا لن يعمل.شكله الخارجي دائما بعد إلى الخادم.

في نموذج 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>

إذا كنت ترغب في تحديث/تغيير من شكل القسم ، ثم لا هذا لا يمكن أن يتم دون استخدام جافا سكريبت و أداء جافا سكريبت آخر(الملقب اياكس).

نصائح أخرى

إذا كنت بناء وحدة تحكم الطريقة التي تقبل FormCollection و عرض اثنين من أشكال المعرفة ، formcollection عاد إما أن يسكنها مع القيم من شكل أو نموذج 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