c# एएसपीनेट एमवीसी 4 में आंशिक विचारों का उपयोग करना




asp.net-mvc razor (2)

उस कोड को बदलें जहां आप आंशिक दृश्य लोड करते हैं:

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

ऐसा इसलिए है क्योंकि आंशिक दृश्य एक नोट की उम्मीद कर रहा है लेकिन मूल दृश्य के मॉडल को पारित कर रहा है जो IENumerable है

मैंने हाल ही में एएसपीनेट एमवीसी (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>
}

मेरे मूल इंडेक्स व्यू (इंडेक्स.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>

(का उपयोग कर: @ एचटीएमएल। पार्टियल ("_ बनाएँ नोट") हालांकि। यह काम नहीं प्रतीत होता है, क्योंकि मुझे निम्न त्रुटि संदेश मिलता है:

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

मेरे नोट्स नियंत्रक इस तरह दिखते हैं:

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");
}

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

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


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

आप पैरामीटर जोड़कर ऐसा कर सकते हैं, जिसे मैं अनुमान लगा रहा हूं क्योंकि यह फ़ॉर्म फॉर्म एक नया Note

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






partial-views