2014-02-10 4 views
0

У меня есть простой вид, где у меня есть форма AJAX я использую для фильтрации записей:Ajax запрос освежать всю страницу вместо части

@using (Ajax.BeginForm("Index", new AjaxOptions() 
{ 

    InsertionMode=InsertionMode.Replace, 
    UpdateTargetId="dane" 
})) 
{ 

    @Html.Partial("SearchTab") 
} 

@Html.Partial("ShowPartial") // <--- id="dane" 

Частичное SearchTab:

<div class="row"> 
     <div class="col-lg-3"> 
      <div class="input-group"> 
       <div class="input-group-addon name"> 
        User name: 
       </div> 
       <input type="text" name="name" class="form-control" /> 
      </div> 
     </div> 
     <div class="col-lg-3"> 
      <div class="input-group"> 
       <div class="input-group-addon surname"> 
        User surname: 
       </div> 
       <input type="text" name="surname" class="form-control" /> 
      </div> 
     </div> 
     <div class="col-lg-3"> 
      <div class="input-group"> 
       <div class="input-group-addon devicename"> 
        Device name: 
       </div> 
       <input type="text" name="deviceName" class="form-control" /> 
      </div> 
     </div> 
     <div class="col-lg-3"> 
      <div class="input-group"> 
       <div class="input-group-addon devicemanufacturer"> 
        Device Manufactuer: 
       </div> 
       <input type="text" name="deviceManufacturer" class="form-control" /> 
      </div> 
     </div> 
    </div> 
    <input type="submit" class="btn btn-default" value="Filter" id="filter"/> 
    <br /> 

контроллер действия:

public ActionResult Index(string name, string surname ,string deviceName, string deviceManufacturer, string Page) 
     { 
      bool RoleId = ad.CheckIfAdmin(Request.LogonUserIdentity.Name.Substring(Request.LogonUserIdentity.Name.LastIndexOf(@"\") + 1)); 
      ViewBag.RoleId = RoleId; 
      var deviceusages = db.DeviceUsages.Include(d => d.DeviceInstance).Include(d => d.Storage).Include(d => d.User).Where(w=>w.UserId!=6).Skip((int.Parse(Page)-1)*30).Take(30); 
      if(name!="" && name!=null) 
      { 
       deviceusages = deviceusages.Where(w => w.User.Name.Contains(name)); 
      } 
      if (surname != "" && surname != null) 
      { 
       deviceusages = deviceusages.Where(w => w.User.Surname.Contains(surname)); 
      } 
      if (deviceName != "" && deviceName != null) 
      { 
       deviceusages = deviceusages.Where(w => w.DeviceInstance.Device.Name.Contains(deviceName)); 
      } 
      if (deviceManufacturer!= "" && deviceManufacturer != null) 
      { 
       deviceusages = deviceusages.Where(w => w.DeviceInstance.Device.Manufacturer.Contains(deviceManufacturer)); 
      } 
      return View(deviceusages.ToList()); 
     } 

После ввода чего-либо в поле ввода и нажатия фильтра. Ajax должен обновить ShowPartial и сохранить значения в полях ввода из SerchTab, но вместо этого я получаю отфильтрованные записи и входы становятся пустыми. Может кто-нибудь предложить мне редактирует, чтобы изменить это поведение

+0

Я использовал точный код, но не смог воспроизвести вашу проблему, я имею в виду, что форма сохраняет свои значения. Я думаю, что проблема не в элементах формы, вам нужно проверить другие части кода. – ramiramilu

+0

Мне удалось решить мою проблему. Мне нужно было изменить код для использования Html-помощников. К сожалению, я могу принять свой ответ через два дня. – szpic

+0

Я думаю, что вам не нужно менять свой код на HtmlHelpers. Я не вижу причины для изменения. Но мне было интересно, как она исправила вашу проблему. В любом случае я рад, что вы решили свою проблему. – ramiramilu

ответ

0

Хорошо, я нашел причину проблемы.

мне нужно изменить этот код

<div class="input-group"> 
    <div class="input-group-addon name"> 
     User name: 
    </div> 
    <input type="text" name="name" class="form-control" /> 
</div> 

Into же вещь использовал остроумие .net хелперов Html. После этого изменения все работает!

@Html.Label("User name: ", new { @class = "input-group-addon" }) 
@Html.TextBox("name", null, new { @type = "text", @class = "form-control" }) 
0

Если Вы намереваетесь

return View() 

вы также должны вернуть исходную модель, чтобы контрольные значения могли быть заполнены с сохраненными значениями.

В качестве альтернативы, если вам просто нужно вернуть список:

deviceusages.ToList() 

Затем вы можете вернуть PartialView() например .;

return PartialView(deviceusages.ToList()); 
Смежные вопросы