MVC3 Razor Partial View не отправляет обратно на контроллер - PullRequest
0 голосов
/ 17 января 2012

У меня есть частичное представление, на котором есть кнопка создания, однако она никогда не достигает контроллера после нажатия. При нажатии он переходит к индексу, т. Е. / Отступить от / Rebate / Edit / 1

@model RMS.Models.RebateLine



@using (Html.BeginForm("Create","RebateLine",FormMethod.Post )) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>RebateLine</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.RebateID)
    </div>
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}

Редактировать: добавлена ​​логика контроллера

    public class RebateLineController : BaseController
{
   public ActionResult Create()
    {
        return View();
    } 

    //
    // POST: /RebateLine/Create

    [HttpPost]
    public ActionResult Create(RebateLine rebateline)
    {
        if (ModelState.IsValid)
        {
            UnitOfWork.RebateLineRepository.Insert(rebateline);
            UnitOfWork.Save();

            return RedirectToAction("Index");  
        }

        return View(rebateline);
    }
...
  }

Дополнительное редактирование: / Rebate - это то, что отображается после нажатия кнопки «Создать», а ниже - вызов вызываемого фрагмента.

  @{ Html.RenderPartial("_RebateLines",Model.RebateLines.FirstOrDefault() ); }

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

Ответы [ 4 ]

1 голос
/ 17 января 2012

Кажется, ваш контроллер назван RebateController.В таком случае измените:

@using (Html.BeginForm("Create","RebateLine",FormMethod.Post )) {

на

@using (Html.BeginForm("Create","Rebate",FormMethod.Post )) {

РЕДАКТИРОВАТЬ

Создайте DebugController и добавьте действие с именем:Test1.Создайте для него соответствующий вид.Не используйте страницы макета.

Просто добавьте эту разметку в раздел тела сообщения:

<div>
@{Html.RenderPartial("_RebateLines",new Model.RebateLines());}
</div>

Запустите проект в режиме отладки и перейдите по ссылке / debug / test1.Поместите точку останова в действие RebatteLines :: Create.Нажмите кнопку отправки.Точка останова должна быть достигнута.Если это нажатие, это означает, что на странице, где вы вызываете Html.RenderPartial, есть что-то, что препятствует отправке формы на ожидаемый URL-адрес, возможно, какой-то javascript.Может даже быть в вашем макете.Подтвердите, что упомянутый выше тест проходит как ожидалось.

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

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

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

Попробуйте использовать

@Html.RenderAction("Create", "RebateLines", new { id = Model.RebateLines.FirstOrDefault().RebateID })

И измените свой контроллер, как показано ниже:

public class RebateLineController : BaseController
{
   public ActionResult Create(int id)
    {
      return View();
    } 

//
// POST: /RebateLine/Create

[HttpPost]
public ActionResult Create(int id,RebateLine rebateline)
{
    if (ModelState.IsValid)
    {
        UnitOfWork.RebateLineRepository.Insert(rebateline);
        UnitOfWork.Save();

        return RedirectToAction("Index");  
    }

    return View(rebateline);
}
...
}

Надеюсь, это поможет ..

Отметьте как ответ, если это полезно.

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

Вы используете контроллер с именем «RebateLineController» и ActionResult «Создать».Но вы упомянули URL как "/ Rebate / Edit / 1".Правильно ли указан URL-адрес?

А из вашего кода:

if (ModelState.IsValid)
    {
        UnitOfWork.RebateLineRepository.Insert(rebateline);
        UnitOfWork.Save();

        return RedirectToAction("Index");  
    }

ясно, что если состояние модели действительно, страница будет перенаправлена ​​на «Индекс», как вы дали:

return RedirectToAction("Index");

Я прав?Это то, что я могу предположить из вашего кода.

С уважением .. Sunil

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