ASP.NET MVC ViewUserControl в режиме редактирования не работает, если добавить кнопку - PullRequest
0 голосов
/ 10 февраля 2011

Hy, у меня есть следующий ViewUserControl:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>

<table>
<tr>
   <td><%= Html.TextBox("") %></td>
   <td><button type="button" id="workType-open-button" class="t-button" onclick="modalWin('http://localhost:29357/WorkType/SelectForTR')">Select</button></td>
</tr>
</table>

<script type="text/javascript">
function modalWin(url) {
    if (window.showModalDialog) {
        window.showModalDialog(url, "Select work type", "dialogWidth:700px;dialogHeight:450px");
    }
    else {
        window.open(url, 'Select work type', 'height=700,width=450,toolbar=no,directories=no,status=no, menubar=no,scrollbars=no,resizable=no ,modal=yes');
    }
} 
</script>

Я использую это для редактирования следующего свойства класса:

[UIHint("WorkTypes"), Required]
public int WorkType { get; set; }

В UserControl у меня есть следующий код:

[HttpPost]
[GridAction]
    public ActionResult InsertTimeRegistration()
    {
        TimeRegistrationViewModel newT = new TimeRegistrationViewModel();

        if (TryUpdateModel(newT))
        {
            //The model is valid - insert the time registration.
            newT.Employee = 6;
            repo.AddTimeRegistration(newT);
        }


        return View(new GridModel(repo.GetAllTimeRegistrationOfAnEmployee(6)));
    }

Проблема в том, что если я удаляю кнопку из элемента управления, она работает нормально, но с кнопкой она не обновляет модель.Параметр POST имеет значение, вставленное в форму редактирования, но запись не сохраняется в дБ.

Пожалуйста, дайте мне совет, если можете.

Спасибо

1 Ответ

1 голос
/ 11 февраля 2011

Причина, по которой это не работает, заключается в том, что ваш InsertTimeRegistration доступен только с глаголом POST HTTP. Вы вызываете его в javascript с помощью window.open или window.showModalDialog, который, как я полагаю, отправляет запрос GET (я уверен, что window.open).

Таким образом, вам нужно настроить функцию window.showModalDialog для отправки запроса POST. Вот пример того, как вы можете опубликовать HTML <form>, используя AJAX:

var formToPost = $('#idofyourform');
$.ajax({
    url: formToPost.attr('action'),
    type: 'POST',
    data: formToPost.serialize(),
    success: function(result) {
        alert('form successfully submitted');
    }
});
...