Почему моя форма не публикуется для правильного действия контроллера? - PullRequest
0 голосов
/ 19 июля 2011

Как я могу различить эти 2 маршрута в моей регистрации области?

Это последние 2 маршрута в регистрации этой области.

Первый маршрут - когда загружается представление.Работает нормально.

Первый маршрут загружает форму, которая затем отправляется на тот же контроллер, но с другим действием.

Я никогда не получаю ОК от контроллера.Возможно, он не попал в контроллер из-за проблемы маршрутизации.

Чего мне не хватает?

    context.MapRoute(
        "Load",
        "app/respond/{Id}",
        new { controller = "Controller1", action = "Index" }
    );

    context.MapRoute(
        "Update",
        "app/respond/{action}",
        new { controller = "Controller1", action = "Update" }
    );

Вот как выглядит форма:

@using (Html.BeginForm("Update", "Respond", FormMethod.Post, new { id = "frmUpdate" }))
{
   //all form fields go here
}

Вот какрегистрация сделана:

$('#frmUpdate').submit(function () {
    //verify all field values

    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        success: function (result) {
            if (result.s == 'OK')
                alert("Success! Response updated");
            else
                alert("Sorry! Update failed.");//this is what I get
        }
    });

    return false;
});

Мой контроллер:

[HttpPost]
public ActionResult Update(MyModel model)
{
    return Json(new { s = "OK", m = "Hi from controller" });
}

1 Ответ

1 голос
/ 19 июля 2011

Вы не можете различить эти 2 маршрута, потому что они следуют абсолютно одинаковому шаблону URL app/respond/something. Вы не накладывали никаких ограничений на something, поэтому первый маршрут всегда будет совпадать.

Если вы хотите, чтобы система маршрутизации могла различать, вам нужно использовать ограничение, например, допустим, что {id} должен содержать только цифры:

context.MapRoute(
    "Load",
    "app/respond/{id}",
    new { controller = "Controller1", action = "Index" },
    new { id = @"[0-9]+" }
);

context.MapRoute(
    "Update",
    "app/respond/{action}",
    new { controller = "Controller1", action = "Update" }
);

Теперь, когда вы запрашиваете app/respond/123, вызывается действие Index, а когда вы вызываете app/respond/FooBar, вызывается действие FooBar. И если вы запросите app/respond, будет вызвано действие Update.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...