2012-01-17 2 views
0

У меня есть частичный вид, который имеет кнопку создания на нем, однако он никогда не доходит до контроллера после нажатия. При нажатии она идет к индексу т/Rebate из/фальца/Редактировать/1MVC3 Razor Partial View не отправляет обратно контроллеру

@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> 
} 

Edit: Добавлен логический контроллер

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); 
    } 
... 
    } 

Дополнительное редактирование:/фальца является то, что отображается после я нажимаю создать и ниже это вызов частичного, который вызывается.

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

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

+0

Вы можете добавить код для своего RebateLineController :: Создать действие? – santiagoIT

+0

Конечно, может, хотя, как указано, никогда не доходит до него. Я уверен, что это как-то связано с тем, как объявлено частичное или как внутри него находится html-форма. – CouncilScribe

+0

Каков точный URL-адрес, который отображается после отправки формы? – santiagoIT

ответ

0

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

1

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

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

в

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

EDIT

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

Просто добавьте эту разметку в секции кузова:

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

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

+0

У меня есть два отдельных контроллера, один из которых называется скидкой, а один называется скидкой. – CouncilScribe

+0

В коде нет ничего плохого. Это действительно должно сработать. Вы пытались установить точку останова в своем действии Create? Вы на 100% уверены, что его не называют? – santiagoIT

+0

Покажите нам код, где вы предоставляете частичный вид? Вы уверены, что делаете правильный? – santiagoIT

0

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

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

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

     return RedirectToAction("Index"); 
    } 

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

return RedirectToAction("Index"); 

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

С уважением .. Сунило

+0

Частичный вид на странице deaqls со скидкой, если у вас есть URL. – CouncilScribe

-1

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

@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); 
} 
... 
} 

Надеется, что это помогает ..

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

Смежные вопросы