【问题标题】:Partial view inside parent view not sending data to controller - asp.net MVC父视图内的部分视图不向控制器发送数据 - asp.net MVC
【发布时间】:2015-05-19 12:06:45
【问题描述】:

我有一个部分视图名称 test/index

以下是代码-

@model MyFirstMVC.Models.testModels
@using (Html.BeginForm())
{ 
     @Html.TextBox("test1")
     <input type="submit" value="click" />
     @ViewBag.a
}

这个局部视图的控制器在后面-

    [HttpPost]
    public ActionResult Index(MyFirstMVC.Models.testModels m)
    {
        ViewBag.a = Request["test1"].ToString() + " from controler";
        return View(m);
    }

在我的父视图中,我嵌入了如下所示的部分视图 -

 @Html.Partial("../test/index",new MyFirstMVC.Models.testModels())

当我运行应用程序时,部分视图确实出现在父视图中。但是当我在局部视图中输入值并提交时,什么都没有发生(该值没有转发到局部视图的控制器 - 我已经检查了与局部视图相关的控制器操作方法是否没有通过设置断点来调用) .

任何帮助将不胜感激。为什么我的局部视图没有向其控制器发送值?

【问题讨论】:

  • 您在哪个页面嵌入了局部视图?
  • 请出示您的主视图代码
  • 页面是否在Controller/Index重新渲染?如果您将Html.BeginForm() 留空,MVC 将尝试将其发布到当前 URL。并且这些值不是在Request 中传递的,而是在FormCollection 中传递的。将 FormCollection 添加到您的 Index 方法中,您将可以访问所有表单元素。

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


【解决方案1】:

如果您不回发到生成视图的相同方法,则需要在 Html.BeginForm() 中指定控制器和操作名称

@model MyFirstMVC.Models.testModels
@using (Html.BeginForm("Index", "Test"))
{ 
    @Html.TextBox("test1")
    <input type="submit" value="click" />
    @ViewBag.a
}

【讨论】:

  • 感谢您的快速发帖。但是,如果我留在同一页面(视图)并且仍然能够更新内容,是否有可能。我不希望 url 更改或重定向到部分视图。我想留在父视图上并且仍然能够触发子视图的操作方法
  • 然后您需要 (1) 使用 ajax 发布表单或 (2) 正常发布,然后重定向回生成视图的原始方法。但不清楚您的代码到底在做什么。为什么您的视图不包含绑定到模型属性的任何表单控件,为什么唯一的表单控件不绑定到任何东西? (或者你只是省略了一些代码,因为它没有什么意义)
猜你喜欢
  • 2018-08-06
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
相关资源
最近更新 更多