我定义了一个student类,然后在cotroller中的Index方法中使用,将产生了拼接字符串赋给t,那么问题来了,每当我在view视图里把t用强制类型放入多行文本textaera的时候,运行时它都会报错,说
未将对象引用设置到对象的实例。
controller
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(student t)
{
//student t = new student();
StringBuilder mystr = new StringBuilder();
mystr.Append("你的名字叫什么" +t.Name + ",是" );
mystr.Append(t.Sex + "生,");
mystr.Append("年龄断为" + t.Age+",");
mystr.Append("体型" + t.Body+",");
mystr.Append("爱好是" + t.Hobitty.First() + ",");
//if (t.Hobitty.h1 == "true") { mystr.Append("看书"); }
t.Message = mystr.ToString();
ViewData.Model = t;
return View(new student());
}
view视图
<td>@Html.TextArea( Model.Message)</td>
student类
public class student
{
public string Name { set; get; }
public int Age { set; get; }
public char Sex { set; get; }
public string Body { set; get; }
public string Message { set; get; }
public string Image { set; get; }
public string[] Hobitty{ set; get; }
public student (string Name,int Age,char Sex,
string Body,string Message,
IEnumerable<string> Hobitty)
{
this.Name = Name;
this.Age = Age;
this.Sex = Sex;
this.Body = Body;
this.Message = Message;
List<string> ss = new List<string>(3);
foreach(var a in Hobitty)
{
ss.Add(a);
}
this.Hobitty= ss.ToArray() ;
}
public student() {}
}
问题是这样的。
[HttpPost]
public ActionResult Index(student t){return View(new student());}//定义是需要post请求的时候才会执行
public ActionResult Index(){return View();}//直接访问
视图
<td>@Html.TextArea( Model.Message)</td>
如果是直接访问就会报错。因为没有view方法没有传入model对象。直接取就会是空引用。
使用post访问就不会报空引用错误了。
//建议更改为
[HttpPost]
public ActionResult Index(student t){
//student t = new student();
------原有代码-------
return View(t);
}
public ActionResult Index(){return View(new student());}
传入参数t之后,不能再实例化,它会报错
@hoofin:
控制器:
public ActionResult Index() { return View(new student()); } [HttpPost] public ActionResult Index(student t) { StringBuilder mystr = new StringBuilder(); mystr.Append("你的名字叫什么" + t.Name + ",是"); mystr.Append(t.Sex + "生,"); mystr.Append("年龄断为" + t.Age + ","); mystr.Append("体型" + t.Body + ","); mystr.Append("爱好是," ); if (t.Hobitty != null) { foreach (var item in t.Hobitty) { mystr.Append(item); } } mystr.Append(","); //if (t.Hobitty.h1 == "true") { mystr.Append("看书"); } t.Message = mystr.ToString(); ViewData.Model = t; return View(t); }
view
@model MvcApplication3.Controllers.student @{ ViewBag.Title = "Index"; } <h2><td> @Html.TextArea("areaName", Model.Message) </td> </h2> <div> <form action="~/Home" id="form1" method="post"> <input name="Name" value="张三" type="hidden" /> <input name="Sex" value="男" type="hidden" /> <input name="Body" value="偏胖" type="hidden" /> <input name="Hobitty" value="体育" type="hidden" /> <input name="Hobitty" value="纸牌" type="hidden" /> <input type="submit"/> </form> </div>
提交前:
提交后
说明一下:
@Html.TextArea("文本域name属性的值","默认值");
例如@Html.TextArea("test","默认值");
生成html:<textarea name="test" id="text" rows="2" cols="20">默认值</textarea>
@凝冰: 好,我试试 能加个QQm吗?
@hoofin: 546341921
@凝冰: 还是不行,能帮我调试一下吗?
从报错上你就能了解到是空异常,你写了两个index的action,你第一个是不在参数的,第二个是请求带实体类的,首先你要区分你在请求的是哪个action,另外你的ViewData.Model = t;
return View(new student());这两行本来就冲突,因为他们是等效的。
我想在一个页面上发送请求和接受,
@hoofin:我知道,在一个页面上做这些处理是可以的,关键你报错看看是在哪个请求上出的错
@流年莫逝:在用httppost强类型传到view多行文本的时候报的错