MVC3 Razor Partial View不会发送回控制器

时间:2012-01-17 02:34:52

标签: c# asp.net-mvc-3 razor

我有一个局部视图,上面有一个创建按钮,但是一旦按下它就不会到达控制器。按下时,它将转至/ Rebate / 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 个答案:

答案 0 :(得分:1)

您的Controller似乎名为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 url。 在RebatteLines :: Create操作中放置一个断点。 点击提交按钮。 必须击中断点。 如果它被点击意味着页面中有一些你正在调用Html.RenderPartial的东西阻止表单提交到预期的URL,可能是一些javascript。甚至可能在你的布局。 确认上面提到的测试是否按预期运行。

答案 1 :(得分:0)

您正在使用名为“RebateLineController”的控制器和ActionResult“Create”。但是你已经提到了网址为“/ Rebate / Edit / 1”。网址是否正确?

从您的代码:

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

        return RedirectToAction("Index");  
    }

很明显,如果模型状态有效,页面将被重定向到你给出的“索引”:

return RedirectToAction("Index");

我说错了吗?这是我可以从您的代码中假设的。

问候.. 苏尼

答案 2 :(得分:0)

因为你的所有代码都很好看。我会看看Glimpse这可能有助于您追踪问题。

答案 3 :(得分:-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);
}
...
}

希望有所帮助......

如果有用,请标记为答案。