参数字典包含参数的空项
<%using (Html.BeginForm("OrderDevice", "ImportXML", FormMethod.Post))
{ %>
<table id="OrderDevices" class="data-table">
<tr>
<th>
DeviceId
</th>
<th>
Id
</th>
<th>
OrderId
</th>
</tr>
<% foreach (var item in Model) { %>
<tr>
<td>
<input readonly="readonly" class="" id="DeviceId" type="text"
name="<%= Html.Encode(item.DeviceId) %>"
value="<%= Html.Encode(item.DeviceId) %>" style="width: 61px" />
</td>
<td>
<input readonly="readonly" class="" id="c" type="text"
name= "<%= Html.Encode(item.Id) %>" value="
<%= Html.Encode(item.Id) %>"
style="width: 50px" />
</td>
<td>
<input readonly="readonly" class="" id="OrderId" type="text"
name= " <%= Html.Encode(item.OrderId) %>"
value="<%= Html.Encode(item.OrderId) %> " style="width: 49px" />
</td>
</tr>
<% } %>
</table>
<input type="submit" value="Create"/>
<%} %>
我的控制器操作:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult OrderDevice(int id)
{
try
{
// TODO: Add insert logic here
orderdevice ord = new orderdevice();
ord.Id = System.Convert.ToInt32(Request.Form["Id"]);
ord.OrderId = System.Convert.ToInt32(Request.Form["OrderId"]);
ord.DeviceId = System.Convert.ToInt32(Request.Form["DeviceId"]);
XMLEntities.AddToorderdevice(ord);
XMLEntities.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View("Index");
}
}
发布表单时,出现此错误:参数字典中包含'MvcKVteam'中方法'System.Web.Mvc.ActionResult OrderDevice(Int32)'的非空类型'System.Int32'的参数'id'的空项。 Controllers.ImportXMLController”。 可选参数必须是引用类型,可为空类型,或者声明为可选参数。 参数名称:参数
如何解决它?
首先,我建议你使用MVC自动处理参数,而不是将它们自己排除在请求之外。 你的控制器动作有一个似乎被忽略的id参数 - 使用它并添加其他的参数来获得输入参数。
其次,你的HTML看起来有点偏离。 您正在使用设备ID,商品ID和订单ID值作为输入元素名称。 这将意味着,不是有deviceId=123&itemId=456&orderId=789
而是得到123=123&456=456&789=789
,这不是非常有用! 尝试将输入字段更改为如下所示的内容:
<input ... name="deviceId" value="<%= Html.Encode(item.DeviceId) %>" ... />
然后你可以在你的控制器中拥有一个参数deviceId
,像这样:
public ActionResult OrderDevice(int deviceId, int itmId, int orderId)
{
// ...
}
这样做,你不会自己使用Request.Form [...]。
错误表明,您从视图发送给控制器的参数名称不同。
例:
@Html.ActionLink(item.PropertyId, "View", new { @id= item.PropertyId })
public ActionResult Edit(int propId)
{
var result = _service.GetProperty(propId);
return View("Index", result);
}
在这个代码中,参数'id'从视图传递过来。 但实际的参数名称是'propId'。 更改名称将修复此错误。
此错误意味着mvc canoot会为您的ID属性找到必须作为参数传递的值。要解决此问题,请在控制器上包含以下内容。
public ActionResult OrderDevice(string id){
ViewBag.S = id;
if (!string.IsNullOrEmpty(id))
{
int idint = Convert.ToInt16(id);
if (ModelState.IsValid)
{
try
{
// TODO: Add insert logic here
orderdevice ord = new orderdevice();
XMLEntities.AddToorderdevice(ord.Search(idint));
XMLEntities.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View("Index");
}
}
}
return View();
}
Seacrh假定你的程序包含一个搜索Device.Hope的方法,这有所帮助。
链接地址: http://www.djcxy.com/p/39219.html上一篇: The parameters dictionary contains a null entry for parameter