2012-11-19 5 views
0

Надеюсь, вы можете помочь мне с одной диллемой. Я собираюсь написать кучу кода, прежде чем я задать свой вопрос ниже :)Открытое окно Telerik

Когда что-то нажал на моей странице:

<input type='button' value='1' name='derp1' onclick='OpenTelerikWindow(1)' /> 
<br/> 
<input type='button' value='2' name='derp2' onclick='OpenTelerikWindow(2)' /> 

открыть окно Telerik с Jquery:

function OpenTelerikWindow(arg) { 
var url = '/Controller/Derp/'; 
$.ajax({ 
    type: "GET", 
    url: url, 
    dataType: "html", 
    data: { id: arg } 
    success: function (data) { 
     $('#PaymentWindow').data("tWindow").content(data); 
     $('#PaymentWindow').data("tWindow").center().open().refresh(); 
    } 
    }); 
} 

My Controller ActionResult:

public ActionResult Derp(int id) 
{ 
    SomeModel someModel = _GetModel(id); 
    return PartialView("Derp", someModel) 
} 

И тогда содержание моего окна Telerik идет что-то вроде этого:

@SomeModel 
<div id="theDerpina"> 
    <div> 
     //Some Stuff 
     @using (Ajax.BeginForm("Derpina1", "Controller", new { id = SomeModel.id }, new AjaxOptions 
      { 
       HttpMethod = "POST", 
       UpdateTargetId = "theDerpina", 
       InsertionMode = InsertionMode.Replace 
      }, new { id = "feedback-form" })) 
     { 
      //Some Stuff 
      <button type="submit" > Submit</button> 
      <br/> 
      <button type="button" > CloseWindow </button> 
     } 
    </div> 
    <div> 
     //More Stuff 
     @using (Ajax.BeginForm("Derpina2", "Controller", new { id = SomeModel.id }, new AjaxOptions 
      { 
       HttpMethod = "POST", 
       UpdateTargetId = "theDerpina", 
       InsertionMode = InsertionMode.Replace 
      }, new { id = "feedback-form" })) 
     { 
      //Different Stuff 
      <button type="submit" > Submit</button> 
      <br/> 
      <button type="button" > CloseWindow </button> 
     } 
    </div> 
</div> 

Мои две другие действия контроллера:

public ActionResult Derpina1(int id) 
{ 
    SomeModel someModel = _GetModel(id); 
    if(ModelState.IsValid) 
    { 
     //DoStuff 
     return View("SomeOtherView"); 
    } 
    else 
    { 
     return PartialView("Derp", someModel); 
    } 
} 

public ActionResult Derpina2(int id) 
{ 
    SomeModel someModel = _GetModel(id); 
    if(ModelState.IsValid) 
    { 
     //DoDifferentStuff 
     return View("SomeOtherView"); 
    } 
    else 
    { 
     return PartialView("Derp", someModel); 
    } 
} 

Когда я открываю окно один раз, все работает хорошо. Однако, если бы я должен был открыть Окно, закройте его, а затем снова откройте его, затем произойдет странное. Скажем, например, что я нажал кнопку отправки для Derpina1, я бы получил два вызова этого конкретного действия контроллера. Если я отслеживаю консоль в Firebug, я вижу два отдельных вызова для моего действия с контроллером. Тогда то же самое произойдет, если я закрою окно еще раз, снова открою его и снова отправлю, теперь действие контроллера теперь получит 4 вызова моего действия с контроллером.

Возможно, вы, ребята, можете указать на правильное направление. Должен ли я открывать окно Telerik по-другому, также должен ли я использовать другой метод для возврата ModelError, чтобы это произошло? (потому что я столкнулся с таким же поведением, если я получу ModelError)

ответ

0

Мне удалось найти решение после того, как вы отправили его в Google. Все, что я делал, это создание окна на лету из сценария, а затем уничтожение его после того, как я его использовал:

function OpenTelerikWindow(arg) { 
var url = '/Controller/Derp/'; 
$.ajax({ 
    type: "GET", 
    url: url, 
    dataType: "html", 
    data: { id: arg } 
    success: function (data) { 
     var paymentWindow = $("<div id='PaymentWindow'></div>").tWindow({ 
      title: "Payment", 
      contentUrl: '', 
      html: data, 
      modal: true, 
      resizable: false, 
      draggable: true, 
      width: 500, 
      height: 640, 
      onClose: function (e) { 
       e.preventDefault(); 
       paymentWindow.data('tWindow').destroy(); 
      } 
     }); 
     paymentWindow.data('tWindow').center().open(); 
    } 
    }); 
} 
Смежные вопросы