2013-09-27 2 views
3

У меня есть форма, в которой будут привязываться некоторые значения в двух разных раскрывающихся списках, и я сохраняю выбранное пользователем значение. Теперь я использую атрибуты RequiredIf. Он также отлично работает. Если пользователь пропустил для выбора значения он отображает сообщения, так же, как некоторые выбранные значения в выпадающем списке будут отображаться по умолчанию после нажатия кнопки «Отправить». Мне нужно показать события без каких-либо изменений в выборе пользователей из-за результатов действий. Загрузка снова.Как избежать PostBack в Asp.net MVC4

Мой код для модели;

> public ObservableCollection<Receipt> GetReceiptList() 
>   { 
>    ObservableCollection<Receipt> ReceiptList = new ObservableCollection<Receipt>(); 
>    DataTable dtReceipt = new DataTable(); 
>    dtReceipt = objDAL.ExecuteTable(CommandType.StoredProcedure, "sp_Receipt_Select"); 
>    foreach (DataRow dr in dtReceipt.Rows) 
>    { 
>     ReceiptList.Add(new Receipt 
>     { 
>      Id = Convert.ToInt32(dr["REC_Id_I"]), 
>      Cust_Name = dr["CUS_Name_V"].ToString(), 
>      Pay_Amount = dr["REC_PaidAmount_M"].ToString(), 
>      Pay_Mode = dr["REC_PayMode_C"].ToString(), 
>      Bank_Name = dr["REC_BankName_V"].ToString(), 
>      Bank_Address = dr["REC_BankAddress"].ToString(), 
>      ChequeNo = dr["REC_ChequeNo_V"].ToString(), 
>      Cheque_Date = dr["REC_ChequeDate_D"].ToString(), 
>     }); 
>    } 
>    return ReceiptList; 
>   } 

Код для контроля

//AtLoad 
public ActionResult ReceiptMaster(Receipt model) 
     { 
      ObservableCollection<Receipt> ReceiptList = new ObservableCollection<Receipt>(); 
      Receipt Receipt = new Models.Receipt(); 
      ReceiptList = Receipt.GetReceiptList(); 
      ModelState.Clear(); 
      Sales sales = new Models.Sales(); 
      DataTable dtCustomer = new DataTable(); 
      dtCustomer = sales.GetCustomerList(); 

      IList<Sales> MyCustList = new List<Sales>(); 
      foreach (DataRow mydataRow in dtCustomer.Rows) 
      { 
       MyCustList.Add(new Sales() 
       { 
        Cust_Id = Convert.ToInt32(mydataRow["Id"].ToString().Trim()), 
        Cust_Name = mydataRow["Name"].ToString().Trim() 
       }); 
      } 
      var CustName = new SelectList(MyCustList, "Id", "Cust_Name"); 
      ViewData["Cu_Name"] = CustName; 
      return View(ReceiptList); 
     } 



    //TO Insert 
[HttpPost] 
     public ActionResult ReceiptMaster(Receipt model, string command) 
     { 
      Receipt Receipt = new Models.Receipt(); 

      if (command == "Sumbit") 
      { 
       int Id = 0; 
       if (model.Pay_Mode == "C") 
       { 
        model.ChequeNo = ""; 
        model.Cheque_Date = ("1/1/1753 12:00:00 AM"); 
        model.Bank_Name = ""; 
        model.Bank_Address = ""; 
       } 

       if (ModelState.IsValid) 
       { 
        Id = Receipt.SaveReceipt(model.Id, model.Cust_Id, model.Pay_Amount, model.Pay_Mode, model.Bank_Name, model.Bank_Address, model.ChequeNo, model.Cheque_Date); 
        if (Id > 0) 
        { 
         ViewData["Success"] = "Product was saved successfully."; 
         ViewData["ControlView"] = 1; 

         return RedirectToAction("ReceiptMaster", "Admin"); 

        } 
        return RedirectToAction("ReceiptMaster", "Admin"); 
       } 

       ObservableCollection<Receipt> ReceiptList = new ObservableCollection<Receipt>(); 
       ReceiptList = Receipt.GetReceiptList(); 
       return View(ReceiptList); 
      } 

      ObservableCollection<Receipt> ReceiptList1 = new ObservableCollection<Receipt>(); 
      ReceiptList1 = Receipt.GetReceiptList(); 
      return View(ReceiptList1); 

     } 

Script Используется для значений связываемых в DropDown

<script type="text/javascript"> 

    $(document).ready(function() { 
     $.post('@Url.Action("SelectCustomerForDropJson", "Admin")', null, function (data) { 
      var select = $("#Cust_Id"); 
      select.empty(); 
      select.append($('<option/>', { value: '', text: '--Select--' })); 
      $.each(data, function (index, Data) { 
       select.append($('<option/>', { 
        value: Data.Value, 
        text: Data.Text 
       })); 
      }); 
     }); 
    }); 
</script> 

ответ

2

Изменение return RedirectToAction("ReceiptMaster", "Admin"); в

return View(model); 

в вашем почтовом действии

если вы использовали RedirectToAction, то это загрузите HTTP метод GET. Поэтому ваше сообщение о проверке исчезло.

Просто скопируйте то мимо моего ниже код вместо кода действия Post

и удалить эту строку: Receipt Receipt = new Models.Receipt(); и модель вызова вместо Квитанция

//TO Insert 
[HttpPost] 
     public ActionResult ReceiptMaster(Receipt model, string command) 
     { 


      if (command == "Sumbit") 
      { 
       int Id = 0; 
       if (model.Pay_Mode == "C") 
       { 
        model.ChequeNo = ""; 
        model.Cheque_Date = ("1/1/1753 12:00:00 AM"); 
        model.Bank_Name = ""; 
        model.Bank_Address = ""; 
       } 

       if (ModelState.IsValid) 
       { 
        Id = Receipt.SaveReceipt(model.Id, model.Cust_Id, model.Pay_Amount, model.Pay_Mode, model.Bank_Name, model.Bank_Address, model.ChequeNo, model.Cheque_Date); 
        if (Id > 0) 
        { 
         ViewData["Success"] = "Product was saved successfully."; 
         ViewData["ControlView"] = 1; 
          ObservableCollection<Receipt> ReceiptList = new    ObservableCollection<Receipt>(); 
      ReceiptList = Receipt.GetReceiptList(); 
      return View(ReceiptList); 

        } 
        ObservableCollection<Receipt> ReceiptList = new ObservableCollection<Receipt>(); 
      ReceiptList = Receipt.GetReceiptList(); 
      return View(ReceiptList); 
       } 

       ObservableCollection<Receipt> ReceiptList = new ObservableCollection<Receipt>(); 
       ReceiptList = Receipt.GetReceiptList(); 
       return View(ReceiptList); 
      } 

      ObservableCollection<Receipt> ReceiptList1 = new ObservableCollection<Receipt>(); 
      ReceiptList1 = Receipt.GetReceiptList(); 
      return View(ReceiptList1); 

     } 

Редактировать

Пожалуйста добавьте одно свойство модели для ReceiptList и присвойте значения в этом свойстве внутри метода post, а теперь r eturn только для модели (теперь это значения ReceiptList хранятся в новом свойстве ReceiptList). Но вы возвращаете только свое свойство gridview для просмотра. Но сообщение проверки и предыдущие значения сохраняются в ваших свойствах модели. Поэтому вам нужно добавить одно свойство для ReceiptList в вашей модели и прочитать и записать данные в виде сетки в этом свойстве.

Теперь Вы попробуете мой код ниже (должен видеть мои комментарии, просто представьте себе, что мы model.ReceiptList добавить новое свойство в модели)

//TO Insert 
[HttpPost] 
     public ActionResult ReceiptMaster(Receipt model, string command) 
     { 


      if (command == "Sumbit") 
      { 
       int Id = 0; 
       if (model.Pay_Mode == "C") 
       { 
        model.ChequeNo = ""; 
        model.Cheque_Date = ("1/1/1753 12:00:00 AM"); 
        model.Bank_Name = ""; 
        model.Bank_Address = ""; 
       } 

       if (ModelState.IsValid) 
       { 
        Id = Receipt.SaveReceipt(model.Id, model.Cust_Id, model.Pay_Amount, model.Pay_Mode, model.Bank_Name, model.Bank_Address, model.ChequeNo, model.Cheque_Date); 
        if (Id > 0) 
        { 
         ViewData["Success"] = "Product was saved successfully."; 
         ViewData["ControlView"] = 1; 
          ObservableCollection<Receipt> ReceiptList = new    ObservableCollection<Receipt>(); 
      model.ReceiptList = Receipt.GetReceiptList();// model.ReceiptList is your model property 
      return View(model); 

        } 
        ObservableCollection<Receipt> ReceiptList = new    ObservableCollection<Receipt>(); 
      model.ReceiptList = Receipt.GetReceiptList();// model.ReceiptList is your model property 
      return View(model); 
       } 

       ObservableCollection<Receipt> ReceiptList = new ObservableCollection<Receipt>(); 
       ReceiptList = Receipt.GetReceiptList(); 
       return View(ReceiptList); 
      } 

      ObservableCollection<Receipt> ReceiptList = new    ObservableCollection<Receipt>(); 
      model.ReceiptList = Receipt.GetReceiptList();// model.ReceiptList is your model property 
      return View(model); 

     } 

Добавьте свойство в вашем классе модели, например

ObservableCollection<Receipt> ReceiptList {get :set;} 
+0

Сэр Прекрасно ... Но я использовал веб-сетку в той же форме, чтобы она отображала ошибку при связывании. –

+1

Теперь Am Изменение кода, пожалуйста, увидеть и попробовать, что –

+0

Извините, сэр теперь его работы, как мой предыдущий .. –

0

Ниже коды предотвращают возврат% 100, просто попробуйте.

Вам необходимо использовать Json для предотвращения полной обратной передачи на вашей странице. После этого вы должны вернуться к частичному просмотру.

В качестве примера;

HTML код:

<input type="text" id="UserName" name="UserName"/> 
<input type="button" onclick="ButonClick()" value="Enter"/> 

Javascript Код:

function ButonClick() { 
var data= { 
UserName: $('#UserName').val(), 
}; 
$.ajax({ 
url: "/Home/MyActionResult", 
type: "POST", 
dataType: "json", 
contentType: 'application/json', 
data: JSON.stringify(data), 

Контроллер:

public ActionResult MyActionResult(string UserName,MyModel model) 
{ 
var stringView = RenderRazorViewToString("_YourPartialView", model); 
return Json(stringView, JsonRequestBehavior.AllowGet); 
} 

Примечание:

Вам нужно ниже код, чтобы сделать ваш частичный вид на JSON ,

Добавьте ниже на свой контроллер тоже.

public string RenderRazorViewToString(string viewName, object model) 
{ 
ViewData.Model = model; 
using (var sw = new StringWriter()) 
{ 
var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); 
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); 
viewResult.View.Render(viewContext, sw); 
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View); 
return sw.GetStringBuilder().ToString(); 
} 
}