Как закрыть частичное представление, открытое во всплывающем окне, и обновить главную страницу? - PullRequest
0 голосов
/ 12 января 2012

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

Любая помощь в получении этого с благодарностью.

HTML:

`<a href="javascript:popup('@Url.Action("EditCaseEmployer/" + item.Id, "CaseOptions")')">@item.StartDate.ToShortDateString()</a>`

Вот пользовательские функции javascript для всплывающего окна:

function popup(url) {
window.open(url, 'notes', 'width=900,height=600,scrollbars=yes,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0');
}
function popup(url, windowName) {
window.open(url, windowName, 'width=900,height=600,scrollbars=yes,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0');
}

1 Ответ

0 голосов
/ 12 января 2012

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

public class MyViewModel
{
    public MyViewModel()
    {
        ShouldReload = false;
    }
    public bool ShouldReload { get; set; }

    // Some properties
    public string Foo { get; set; }
}

, а затем в частичном тестировании его значение и обновите программу открытия и закройте всплывающее окно:

@model MyViewModel

@if (Model.ShouldReload)
{
    <script type="text/javascript">
        // refresh the parent window
        window.opener.location.reload();

        // close the popup
        window.close();
    </script>
}
else
{
    using (Html.BeginForm())
    {
        @Html.LabelFor(x => x.Foo)
        @Html.EditorFor(x => x.Foo)
        <button type="submit">OK</button>
    }
}

Теперь все, что осталось, - это 2 действия контроллера, которые будут использоваться, чтобы соответственно показать частичное и обработать его:

public ActionResult Dialog()
{
    var model = new MyViewModel();
    return PartialView(model);
}

[HttpPost]
public ActionResult Dialog(MyViewModel model)
{
    if (!ModelState.IsValid)
    {
        // the model is invalid => redisplay the partial
        return PartialView(model);
    }
    // TODO: at this stage the model is valid 
    // => pass it to the service layer for processing

    // everything went fine => set the ShouldReload flag to true
    // so that the view refreshes its opener and closes itself
    model.ShouldReload = true;
    return PartialView(model);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...