<%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");
}
}
发布表单时出现此错误:参数字典包含非可空类型'System.Int32'参数'id'的空条目,方法'System.Web.Mvc.ActionResult OrderDevice(Int32)'in 'MvcKVteam.Controllers.ImportXMLController'。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数
如何解决?
答案 0 :(得分:3)
首先,我建议您使用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 [...]。
答案 1 :(得分:0)
错误表示,您从视图发送到控制器的参数名称不同。
示例:
@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'。更改名称将修复此错误。
答案 2 :(得分:0)
此错误意味着mvc可以找到必须作为参数传递的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的方法,这会有所帮助。