Asp.net mvc 4 表单post通过空模型-.NET MVC 4

Asp.net mvc 4 表单post通过空模型-.NET MVC 4,asp.net-mvc-4,Asp.net Mvc 4,我正在使用 我正在尝试获取我传递给视图的模型,以便在单击输入时发回控制器的HttpPost方法但是,模型(在本例中仅为列表)在发回时为空。 我已经包括了我的代码以供参考。这只是一个测试随机数据的项目,所以我为糟糕的代码道歉 我有以下视图代码:(显示完整性的整个代码) @{ ViewBag.Title=“主页”; } @使用TestApp.MyObject @模型列表 @ActionLink(“Show About”、“About”、new{id=“1”}、new AjaxOptions{Inse

我正在使用

我正在尝试获取我传递给视图的模型,以便在单击输入时发回控制器的HttpPost方法但是,模型(在本例中仅为列表)在发回时为空。

我已经包括了我的代码以供参考。这只是一个测试随机数据的项目,所以我为糟糕的代码道歉

我有以下视图代码:(显示完整性的整个代码)

@{
ViewBag.Title=“主页”;
}
@使用TestApp.MyObject
@模型列表
@ActionLink(“Show About”、“About”、new{id=“1”}、new AjaxOptions{InsertionMode=InsertionMode.Replace、UpdateTargetId=“contentDiv”})
@ActionLink(“Show Contact”,“Contact”,new AjaxOptions{InsertionMode=InsertionMode.Replace,UpdateTargetId=“contentDiv”})
@使用(Html.BeginForm())
{
@foreach(模型中的触点c)
{
@c、 名字
}
@ViewBag.myColValue
}
$(“按钮”)。单击(函数(){
$(“#aboutContentDiv”).empty();
$(“#aboutContentDiv”).append($(“”).load(“Home/About/”+$(this.attr(“aboutnum0”));
$(“#aboutContentDiv”).append($(“”).load(“Home/About/”+$(this.attr(“aboutnum1”)));
$(“#aboutContentDiv”).append($(“”).load(“Home/About/”+$(this.attr(“aboutnum2”));
});
以下是我的控制器代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TestApp.MyObjects;

namespace TestApp.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
            Contact c = new Contact();
            c.name = "Some Name";
            c.someValues = new List<string>();
            c.someValues.Add("1");
            c.someValues.Add("2");
            c.someValues.Add("3");
            Contact c1 = new Contact();
            c1.name = "Some Name1";
            c1.someValues = new List<string>();
            c1.someValues.Add("4");
            c1.someValues.Add("5");
            c1.someValues.Add("6");
            Contact c2 = new Contact();
            c2.name = "Some Name2";
            c2.someValues = new List<string>();
            c2.someValues.Add("7");
            c2.someValues.Add("8");
            c2.someValues.Add("9");
            List<Contact> clist = new List<Contact>();
            clist.Add(c);
            clist.Add(c1);
            clist.Add(c2);
            Session["myCoolValue"] = "Cool1";
            TempData["myCoolValue"] = "Cool2";
            return View(clist);
        }
        [HttpPost]
        public ActionResult Index(List<Contact> contacts)
        {
            string name = contacts[0].name;
            return View("Index",contacts);
        }
        public PartialViewResult About(string id = "")
        {
            ViewBag.Message = "Your app description page.";
            About a = new About();
            a.someValue = id + " _ modified by contoller";
            ViewBag.myCoolValue = "Cool";
            return PartialView("About",a);
        }

        public PartialViewResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return PartialView("Contact");
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.Mvc;
使用TestApp.MyObject;
命名空间TestApp.Controllers
{
公共类HomeController:控制器
{
公共行动结果索引()
{
ViewBag.Message=“修改此模板以跳转启动ASP.NET MVC应用程序。”;
触点c=新触点();
c、 name=“Some name”;
c、 someValues=新列表();
c、 添加(“1”);
c、 添加(“2”);
c、 添加(“3”);
触点c1=新触点();
c1.name=“一些名字1”;
c1.someValues=新列表();
c1.某些值。添加(“4”);
c1.某些值。添加(“5”);
c1.某些值。添加(“6”);
触点c2=新触点();
c2.name=“一些名字2”;
c2.someValues=新列表();
c2.某些值。添加(“7”);
c2.某些值。添加(“8”);
c2.某些值。添加(“9”);
List clist=新列表();
添加(c);
clist.Add(c1);
clist.Add(c2);
会话[“mycolvalue”]=“Cool1”;
TempData[“mycolvalue”]=“Cool2”;
返回视图(clist);
}
[HttpPost]
公共行动结果索引(列出联系人)
{
字符串名称=联系人[0]。名称;
返回视图(“索引”,联系人);
}
public PartialViewResult About(字符串id=”“)
{
ViewBag.Message=“您的应用程序描述页。”;
About a=新的About();
a、 someValue=id+“u由控制器修改”;
ViewBag.myColValue=“酷”;
返回部分视图(“关于”,a);
}
公共PartialViewResult联系人()
{
ViewBag.Message=“您的联系人页面。”;
返回PartialView(“联系人”);
}
}
}

根据您对我的评论的回复,您需要以下内容:

  // you can use foreach and have a counter variable or this
  for (int i = 0; i < Model.Count; i++)
  {
    // you do not want to use a partial view so let's do it this way
    // put this in an appropriate place in your code
    // like inside a tr or div, it's up to you
    @Html.TextboxFor(m => m[i].name)

  }
//您可以使用foreach并拥有一个计数器变量或
for(int i=0;im[i].name)
}

您是打算接受模型的输入,还是只想将其发回?如果您计划接受输入,您是否有联系人模型的(部分)视图?我通常会有联系人模型的部分视图。我想在这次测试中,我没有。我会认为,这是不需要我有一个接触的部分意见?例如,您可以看到我将第一个联系人的姓名输入到输入中。这应该允许编辑,让我看到后回编辑。或者我不明白这是如何工作的?您创建嵌套的
@Model.name
的方式看起来不错。你是想创建两次输入还是剪切粘贴错误?@kralco626如果你想接受联系人列表作为输入,而不仅仅是其中一个,那么你需要将其放入循环中。因此,根据这个答案,你说如果我想让MVC在textbox值更改时更新模型中的名称,我必须使用TextboxFor,而不是像我在示例中那样通过html创建它。这样做更容易。但是你可以自己编写html。格式为:。而且,您可能还需要每个联系人的Id,因此请确保也将其添加为隐藏字段。
  // you can use foreach and have a counter variable or this
  for (int i = 0; i < Model.Count; i++)
  {
    // you do not want to use a partial view so let's do it this way
    // put this in an appropriate place in your code
    // like inside a tr or div, it's up to you
    @Html.TextboxFor(m => m[i].name)

  }