该应用程序旨在允许用户输入本地计算机的IP地址,然后它将返回该计算机的HDD信息。它以 TextAreaFor 框中已有的默认值开始,并对该值执行查询。这部分没问题。但是当用户尝试输入他们自己的值并点击“刷新”按钮时,它会不断出现错误对象引用未设置为对象的实例。
我不确定为什么会这样。在我看来,单击该按钮会提交一个POST操作,该操作应启动控制器中的第二个方法。然后将当前模型传递给控制器,并附加 TextAreaFor 中的值,并对新值运行mainCode()方法。
编辑:根据What is a NullReferenceException, and how do I fix it?我很确定我从控制器返回一个空模型。我只是不知道如何。表单字段应该发送控制器 TextAreaFor 中包含的所有内容,因此模型不应为空。
Edit2:我做了一些测试,模型返回正常,但TextAreaFor
的值不是。当mainCode()
尝试对startDrives.startingDrives
做一些逻辑时,它不能,因为该变量由于某种原因是空的。
型号:
namespace RelengAdmin.Models
{
public class DriveInfo
{
public class DriveHolder
{
public string startingDrives {get; set;}
}
public DriveHolder startDrives = new DriveHolder();
public void mainCode()
{
/****Code to return the HDD size omitted****/
}
}
}
查看:
@using (Html.BeginForm())
{
<input type="submit" value="Refresh" />
@Html.TextAreaFor(model => model.startDrives.startingDrives, new {@class = "HDDTextBox"})
}
控制器:
namespace RelengAdmin.Controllers
{
public class HDDCheckerController : Controller
{
[HttpGet]
public ActionResult Index()
{
DriveInfo myDrive = new DriveInfo();
myDrive.startDrives.startingDrives = "148.136.148.53"
myDrive.mainCode();
return View(myDrive);
}
[HttpPost]
public ActionResult Index(DriveInfo model)
{
model.mainCode();
return View(model);
}
}
}
答案 0 :(得分:4)
问题是您的模型的startDrives
属性实际上并未声明为具有getter和setter的属性,因此模型绑定器不会绑定到它。我能够在本地复制该问题,并通过将startDrives
声明为属性并在构造函数中初始化来解决它。
public class DriveInfo
{
public class DriveHolder
{
public string startingDrives { get; set; }
}
public DriveHolder startDrives { get; set; }
public DriveInfo()
{
startDrives = new DriveHolder();
}
public void mainCode()
{
/****Code to return the HDD size omitted****/
}
}
答案 1 :(得分:1)
您的问题有点不清楚模型实际上在哪里为空..但我会假设当您点击按钮时,它会转到正确的操作,但model
中没有任何内容因为您没有&# 39; t传递了任何特定的值..
所以试试这个:
<强> CSHTML 强>
@using (Html.BeginForm())
{
<input type="submit" value="Refresh" />
@Html.TextArea("startingDrive", "148.136.148.53", new {@class = "HDDTextBox"})
}
<强>控制器强>
[HttpPost]
public ActionResult Index(string startingDrive)
{
DriveInfo searchThisDrive = new DriveInfo();
searchThisDrive.startDrives.startingDrives = startingDrive;
searchThisDrive.mainCode();
return View(searchThisDrive);
}
请告诉我这是否有帮助!