2012-12-18 13 views
74

में आंशिक विचारों का उपयोग करके मैंने हाल ही में एएसपीनेट एमवीसी (4) के साथ खेलना शुरू कर दिया है, लेकिन मैं अपने सिर को इस मुद्दे के आसपास लपेट नहीं सकता हूं। मुझे यकीन है कि जब आप इसे जानते हैं तो यह आसान है।एएसपीनेट एमवीसी 4

मैं अनिवार्य रूप से मेरी सूचकांक ध्यान में रखते हुए निम्न करने के लिए कोशिश कर रहा हूँ:

  1. सूची प्रकार "नोट" सूचकांक ध्यान में रखते हुए की डेटाबेस में वर्तमान आइटम (इतना आसान है)
  2. नया बना रहा एक ही इंडेक्स व्यू में आइटम (इतना आसान नहीं)।

तो मैं सोचा मैं एक आंशिक दृश्य की जरूरत है, और है कि मैं निम्नलिखित (_CreateNote.cshtml) के रूप में बनाया है:

@model QuickNotes.Models.Note 
@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 

<fieldset> 
    <legend>Note</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Content) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Content) 
     @Html.ValidationMessageFor(model => model.Content) 
    </div> 
    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 
} 

अपने मूल सूचकांक को देखते हुए (Index.cshtml) मैं कोशिश कर रहा हूँ

@model IEnumerable<QuickNotes.Models.Note> 


@{ 
    ViewBag.Title = "Personal notes"; 
} 

<h2>Personal notes</h2> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 

<table> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.Content) 
     </th> 
     <th></th> 
    </tr> 

    @foreach (var item in Model) { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.Content) 
      </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> 

<div> 
    @Html.Partial("_CreateNote") 
</div> 

(का उपयोग करते हुए: @ Html.Partial ("_ CreateNote")) हालांकि इस आंशिक दृश्य प्रस्तुत करना। यह काम करने के लिए प्रतीत नहीं होता मैं निम्न त्रुटि संदेश मिलता है:

Line 35: 
Line 36: <div> 
Line 37:  @Html.Partial("_CreateNote"); 
Line 38: </div> 

Source File: c:\Dropbox\Projects\workspace .NET MVC\QuickNotes\QuickNotes\Views\Notes\Index.cshtml Line: 37 

Stack Trace: 


[InvalidOperationException: The model item passed into the dictionary is of type 'System.Data.Entity.DbSet`1[QuickNotes.Models.Note]', but this dictionary requires a model item of type 'QuickNotes.Models.Note'.] 
    System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value) +405487 

मेरे NotesController इस तरह दिखता है:

public ActionResult Index() 
{ 

    var model = _db.Notes; 

    return View(model); 
} 

// 
// GET: /Notes/Create 

public ActionResult Create() 
{ 
    return View(); 
} 

// 
// GET: /Notes/_CreateNote - Partial view 
public ViewResult _CreateNote() 
{ 
    return View("_CreateNote"); 
} 

मुझे लगता है कि इस तथ्य के सूचकांक दृष्टिकोण यह है कि के साथ क्या करना है मॉडल का अलग-अलग उपयोग करते हुए, जैसा कि @model IEnumerable में है, लेकिन इससे कोई फर्क नहीं पड़ता कि मैं इसे कैसे बदलता हूं, रेंडरपार्टियल, रेंडरएक्शन का उपयोग करके, ViewResult में ActionResult को बदलना आदि, मैं इसे काम नहीं कर सकता।

किसी भी सुझाव की सराहना की जाएगी! अगर आपको और जानकारी चाहिए तो कृपया मुझे बताएं। यदि आवश्यक हो तो मुझे पूरी परियोजना को ज़िप करने में खुशी होगी।

उत्तर

122

बदलें कोड जहां आप के लिए आंशिक दृश्य लोड:

@Html.Partial("_CreateNote", new QuickNotes.Models.Note()) 

इसका कारण यह है आंशिक दृश्य एक नोट की उम्मीद कर रहा है, लेकिन माता-पिता को देखने जो IEnumerable

+5

आप सही कर रहे हैं हो सकता है एक पैरामीटर है, जो मेरा अनुमान है कि जोड़ कर ऐसा कर सकते हैं! आपका बहुत बहुत धन्यवाद! मैंने वास्तव में लगभग एक ही गुच्छा की कोशिश की, लेकिन मुझे नहीं पता था कि मुझे "नया" कथन चाहिए। बेवकूफ मुझे :( –

37

है की मॉडल से पारित कर दिया हो रही है आप एक ही मॉडल को आंशिक दृश्य में पास कर रहे हैं क्योंकि मुख्य दृश्य में पारित किया जा रहा है, और वे अलग-अलग प्रकार हैं। मॉडल Note एस है, जहां आपको एक Note में पास करने की आवश्यकता है।

आप के रूप में यह है बनाने के रूप में एक नया Note

@Html.Partial("_CreateNote", new QuickNotes.Models.Note()) 
+0

हाँ, सही! लगता है कि मैंने कुछ एमवीसी मौलिक सिद्धांतों को याद किया है। धन्यवाद! –

संबंधित मुद्दे