2013-01-04 12 views
19

में RenderAction (actionname, मान) का उपयोग करते हुए मैं कुछ बच्चे वस्तुओं (Items) एक इकाई Request के प्रदर्शित करने के लिए की जरूरत है। अनुरोध के बजाय मुझे यह देखने में बेहतर लगा कि मूल अनुरोध इकाई से अधिक जानकारी है। यह दृश्य मैं RequestInfo कहा जाता है, यह भी मूल अनुरोध Id शामिल हैं।MVC4 मुद्दा

फिर MVC दृश्य में मैंने किया था:

@model CAPS.RequestInfo 
...  
@Html.RenderAction("Items", new { requestId = Model.Id }) 

प्रस्तुत करने के लिए:

public PartialViewResult Items(int requestId) 
{ 
    using (var db = new DbContext()) 
    { 
     var items = db.Items.Where(x => x.Request.Id == requestId); 
     return PartialView("_Items", items); 
    } 
} 

कौन सा एक सामान्य सूची प्रदर्शित होगा:

@model IEnumerable<CAPS.Item> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<table> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.Code) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Description) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Qty) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Value) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Type) 
     </th> 
     <th></th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Code) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Description) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Qty) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Value) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Type) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.Id }) | 
      @Html.ActionLink("Details", "Details", new { id=item.Id }) | 
      @Html.ActionLink("Delete", "Delete", new { id=item.Id }) 
     </td> 
    </tr> 
} 

</table> 

लेकिन मैं एक संकलक त्रुटि हो रही है RenderAction लाइन पर "नहीं implicity परिवर्तित कर सकते हैं प्रकार 'शून्य' को 'ओ bject '' कोई विचार?

उत्तर

43

आप जब प्रस्तुत तरीकों बुला इस वाक्य विन्यास का उपयोग करने की आवश्यकता है:

@{ Html.RenderAction("Items", new { requestId = Model.Id }); } 

@syntax, घुंघराले ब्रेसिज़ के बिना, एक वापसी प्रकार जो पेज को प्रदान की गई हो जाता है की उम्मीद है। आदेश में एक विधि उस पृष्ठ से शून्य रिटर्न कॉल करने के लिए है, तो आप घुंघराले ब्रेसिज़ में कॉल लपेट चाहिए।

कृपया अधिक गहराई से स्पष्टीकरण के लिए निम्न लिंक देखें।

http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx

14

उपयोगी विकल्प:

@model CAPS.RequestInfo 
...  
@Html.Action("Items", new { requestId = Model.Id }) 

यह कोड लौटाता है MvcHtmlString। आंशिकदृश्य के साथ काम करता है और परिणाम देखें। {} वर्णों की आवश्यकता नहीं है।

+1

+1: समान रूप से मान्य उत्तर और बेहतर सूट उस्तरा वाक्य रचना। इसे और वोट चाहिए :) –