2015-08-17 5 views
0

это мой ActionResultих все равно не вернуть ничего в ActionResult не обновлять эту страницу, если валидация поднял

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Payment(PaymentViewModel payment, string returnUrl) 
    { 
     PaymentModel paymentModel = new PaymentModel(); 
     if (ModelState.IsValid) 
     {        
      CreditCardDetailsModel creditCardDetailsModel = new CreditCardDetailsModel(); 
      creditCardDetailsModel.SecurityId = payment.SecurityId; 
      creditCardDetailsModel.ExpiryDate = payment.Month + payment.Year; 
      creditCardDetailsModel.CardNumber = payment.CardNumber; 
      paymentModel.CreditCardDetails = creditCardDetailsModel; 
      TempData["model"] = paymentModel; 
       return RedirectToAction("Payment"); 

     } 

     var query = from state in ModelState.Values 
        from error in state.Errors 
        select error.ErrorMessage; 

     var errorList = query.ToList(); 
     TempData["ErrorMessages"] = errorList; 
     ViewBag.MonthList = new SelectList(new[] { "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12" }); 

     return new EmptyResult(); 
    } 

Это мой PartialView

@model Centra.Web.ViewModels.PaymentViewModel @using (Html.BeginForm("Payment", "Flight", FormMethod.Post,null)) 
{ 
    @Html.AntiForgeryToken() 
    <div class="row space-form traveller-form"> 
     <div class="col-lg-12"> 
      <div class="col-lg-3 row"> 
       <div class="fomr-group text-right"> 
        <label>Credit Card No</label> 
       </div> 
      </div> 
      <div class="col-lg-8"> 
       <div class="fomr-group col-lg-5 cardDetails"> 
        @Html.TextBoxFor(p => p.CardNumber, new { @class = "form-control" }) 
       </div> 
       <div ng-if="creditCardError == true" class="fomr-group col-lg-2 cardDetails"> 
        <label>Please enter valid card number</label> 
       </div> 
      </div> 
     </div> 
     <div class="col-lg-12"> 
      <div class="col-lg-3 row"> 
       <div class="fomr-group text-right"> 
        <label>Expiry Date</label> 
       </div> 
      </div> 
      <div class="col-lg-8"> 

       <div class="fomr-group col-lg-2 cardDetails "> 
        @Html.DropDownListFor(m=>m.Month, (SelectList)ViewBag.MonthList)     
       </div> 
       <div class="fomr-group col-lg-3 cardDetails row">    
        @Html.DropDownListFor(p => p.Year, Enumerable.Range(DateTime.Now.Year, 20) 
        .Select(x => new SelectListItem 
        { 
         Text = x.ToString(), 
         Value = x.ToString() 
        } 
     ), new { @class = "form-control" }) 
       </div> 
      </div> 
     </div> 
     <div class="col-lg-12"> 
      <div class="col-lg-3 row"> 
       <div class="fomr-group text-right"> 
        <label>Name on card</label> 
       </div> 
      </div> 
      <div class="col-lg-8"> 

       <div class="fomr-group col-lg-5 cardDetails"> 
        @Html.TextBoxFor(p => p.NameOnCard, new { @class = "form-control" })      
       </div> 
      </div> 
     </div> 
     <div class="col-lg-12"> 
      <div class="col-lg-3 row"> 
       <div class="fomr-group text-right"> 
        <label>CVV</label> 
       </div> 
      </div> 
      <div class="col-lg-8"> 
       <div class="fomr-group col-lg-2 cardDetails"> 
        @Html.TextBoxFor(p => p.SecurityId, new { @maxlength = "4", @class = "form-control", @placeholder = "CVV" }) 
       </div> 
       <div class="fomr-group col-lg-5 cardDetails TotalPrice"> 
        <label>The 3 digit number printed on the back of card</label> 
       </div> 
      </div> 
     </div> 
     <div class="col-lg-12 terms-conditions"> 
      <div class="col-sm-11 col-lg-offset-1"> 
       <div class="checkbox"> 
        <label> 
         @* @Html.CheckBox("paymentCheckbox", new { @onclick = "function-to-open-dialog()" })*@ 
         <input type="checkbox" id="paymentCheckbox" ng-model="paymentCheckbox"> 
         I understand and agree to the rules and notifications of this fare, the booking privacy policy and the terms & conditions Centra Travels. 
        </label> 
       </div> 
      </div> 
     </div> 


     <div class="col-lg-12"> 
      <div class="col-lg-2 row"> 
       <div class="fomr-group text-right"> 
       </div> 
      </div> 
      <div class="col-lg-9 row"> 
       <div class="fomr-group TotalPrice"> 
        <label> 
         <h3>$ 36,613</h3> 
         <span>(Total inclusive all taxes)</span> 
        </label> 
       </div> 
      </div> 
     </div> 


     <div class="col-lg-12"> 
      <div class="col-lg-2 row"> 
       <div class="fomr-group text-right"> 
       </div> 
      </div> 
      <div class="col-lg-2 row"> 

       <div class="fomr-group text-right col-lg-2"> 
        @*<button type="submit" ng-disabled="!paymentCheckbox" ng-click="Payment(PaymentDetails)" class="btn btn-info makePaymentbtn">Make a Payment</button>*@ 
        <button type="submit" ng-disabled="!paymentCheckbox" class="btn btn-info makePaymentbtn">Make a Payment</button> 
       </div> 
       @Html.Hidden("returnUrl", this.Request.RawUrl) 
      </div> 

     </div> 
    </div> 
} 

И другие partialPages не в mvcRazor формиат их находятся в угловом, поэтому, когда я перенаправляюсь к определенному виду (FlighBooking) // FlightBooking - это мой основной вид в том, что множественные частичные представления - это их, он раздирает вид FlightBooking, но угловое частичное представление теряет свои состояния, поэтому я попытался вернуться в качестве возврата новый EmptyResult(); но состояние страницы теряется, что мне делать? Я хочу, чтобы пчелы на той же странице, не теряя свое состояние, если валидация не удается

ответ

0

Если вы не хотите, чтобы обновить вашу страницу после того, как перейти к действию, вы должны использовать @Ajax.BeginForm вместо @Html.BeginForm. В Интернете есть много учебников.

+0

Но в моем проекте я не должен использовать Ajax, вы знаете какой-либо альтернативный способ? –