2010-05-19 96 views
2
<%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"); 
     } 
    } 

當後一種形式我有這樣的錯誤:參數字典中包含的非參數「ID」無效項'MvcKVteam.Controllers.ImportXMLController'中方法'System.Web.Mvc.ActionResult OrderDevice(Int32)'的可空類型'System.Int32'。可選參數必須是引用類型,可爲空類型,或者聲明爲可選參數。 參數名稱:參數

如何解決?

回答

3

首先,我建議你使用MVC自動處理參數,而不是將它們從Request中抽出。你的控制器動作有一個似乎被忽略的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) %>" ... /> 

然後你可以有一個參數在控制器這樣caled deviceId

public ActionResult OrderDevice(int deviceId, int itmId, int orderId) 
{ 
    // ... 
} 

這樣做,這樣,你就不會定義使用請求自己表格。

+0

Tnx丹尼爾,你解決我的問題 – Ognjen 2010-05-19 08:24:36

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'。更改名稱將修復此錯誤。

0

此錯誤表示mvc canoot爲您的ID屬性找到必須作爲參數傳遞的值。要解決此問題,請在控制器上包含以下內容。

公衆的ActionResult OrderDevice(字符串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這有助於方法的假設。

相關問題