Почему моя форма MVC 3 не была отправлена ​​на правильное действие контроллера? - PullRequest
1 голос
/ 10 июля 2011

У меня есть представление, которое прекрасно отображается с помощью действия Index ().В основном я читаю из БД и загружаю в свою модель.

Когда пользователь заполняет или изменяет значения и нажимает кнопку Отправить, я хочу сформировать форму для публикации в другом действии на том же контроллере.

Ноформа отправляется в действие index () по умолчанию.

Конечная цель - сохранить пользователя на той же странице, но показать результат отправки.

Вот мои коды:

Область регистрации для регистрации маршрута:

context.MapRoute(
                "Test",
                "app/test/{Id}",
                new { controller = "Test", action = "Index" }
            );

Контроллер:

[HttpGet]
public ActionResult Index(string rk, string g){
  TestModel model = new TestModel();
  //Now read from DB & populate the model
  return View(model);  
}

Это действие, которое я хочу отправить для отправки:

[HttpPost]
public ActionResult Update(TestModel model)
{
    model = new TestModel();
    model.Status = "Form Posted!";

    return View("Index", model);
}

Вот мое мнение:

@using (Html.BeginForm("Update", "Test", FormMethod.Post, new { id="frmUpdate"}))
{
   //My form fields get populated by model
   <button type="submit" id="btnUpdate" onclick="return ValidateAndSubmit(this.id, 'result_label');">Update</button>
}

JS Interceptor при отправке нажмите:

function ValidateAndSubmit(b, l) {
        //do validation before submit
        if (AnyFieldNotValid) { alert('failed'); return false; }
        else {
            $("#frmUpdate").submit();
        }        
    }

Что-то я делаю не так?

РЕДАКТИРОВАТЬ: Я не могу сделать пост $ .ajax (), так как в форме есть рекапча.

Ответы [ 2 ]

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

Ваш маршрут не допускает параметр действия, поэтому все, что отправлено на этот контроллер, будет перенаправлено на заданное вами действие по умолчанию, которое составляет Index. Попробуйте следующее:

context.MapRoute(
    "Test",
    "app/test/{action}",
    new { controller = "Test", action = "Index" }
);

Это направит /app/test к действию Index и /app/test/update к действию Update.

0 голосов
/ 10 июля 2011

Может быть 2 таких маршрута, чтобы решить 404:

        context.MapRoute(
            "Test1",
            "app/test/{Id}",
            new { controller = "Test", action = "Index" }
        );

        context.MapRoute(
            "Test2",
            "app/test/{action}",
            new { controller = "Test", action = "Update" }
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...