यह सिंक करने के लिए कुछ समय लिया, लेकिन MVC जिनके बारे में आप everythin के लिए एक मॉडल, एक दृश्य है, और एक नियंत्रक एक तरह से या किसी अन्य के उपयोग का मतलब है जी, आंशिक दृश्य सहित। सभी तीन तत्व एक साथ फिट कैसे हो सकते हैं पहले थोड़ा डरावना हो सकता है। मैं अभी तक एक नहीं किया था, और यह काम करता है - वाहू!
आशा है कि यह अगले व्यक्ति की मदद करे .... क्षमा करें, मैं .NET रूपों के बजाय रेज़र का उपयोग कर रहा हूं। मैं एक SQL सर्वर डेटाबेस से डेटा को एंटिटी फ्रेमवर्क में भी खींच रहा हूं, जिसे डेवलपर का उपयोग करने की संभावना है। मैं शायद वेबग्रिड के साथ थोड़ा सा ओवरबोर्ड चला गया, जो एक foreach स्टेटमेंट से कहीं ज्यादा सुरुचिपूर्ण है। एक मूल @ webgrid.GetHtml() प्रत्येक कॉलम और पंक्ति प्रदर्शित करेगा।
पृष्ठभूमि
इस कामकाजी उदाहरण में, उपयोगकर्ताओं ने चित्र अपलोड किए हैं। आंशिक दृश्य का उपयोग करके उनके चित्र उनके संपादन रूप में प्रदर्शित होते हैं। ImageID और FileName मेटाडेटा SQL सर्वर में जारी है जबकि फ़ाइल स्वयं// सामग्री/उपयोगकर्ता चित्र निर्देशिका में जारी है।
मुझे पता है कि यह थोडा विशाल है, क्योंकि व्यक्तिगत डेटा अपलोड करने और संपादित करने के सभी विवरण नहीं दिखाए जाते हैं। बस एक आंशिक दृश्य का उपयोग करने का सार्थक भागों, पर ध्यान केंद्रित कर रहे हैं कुछ बोनस एफई में फेंक दिया के साथ यद्यपि। नामस्थान जी
आंशिक देखें मॉडल एस & के लिए MVCApp3 है ViewModels.cs
एसक्यूएल सर्वर छवियाँ तालिका में छवि आईडी और फ़ाइल नाम के अलावा कई कॉलम शामिल हैं जैसे [कैप्शन], [विवरण], एक एमडी 5 हैश एक ही छवि को कई बार अपलोड करने से रोकने के लिए, और अपलोड तिथि। व्यूमोडेल एंटिटी को अपनी तस्वीरों को देखने के लिए न्यूनतम आवश्यक न्यूनतम तक पहुंचता है।
public class Picts
{
public int ImageID { get; set; }
public string FileName { get; set; }
}
मुख्य दृश्य देखें Edit.cshtml
नोट डाली/परिवर्तित दृढ़ता से ViewData [] टाइप करने के लिए।
@Html.Partial(
partialViewName: "Picts",
model: (IEnumerable<MVCApp3.Models.Picts>)ViewData["Picts"]
)
आप आंशिक दृश्य के लिए उपयोग करने के लिए आप एक "मॉडल आइटम शब्दकोश में पारित कर दिया मिल जाएगा दृढ़ता से टाइप मॉडल निर्धारित नहीं करते हैं प्रकार 'System.Data.Entity.DynamicProxies की है। .. "त्रुटि है क्योंकि यह मानता है कि आपके माता-पिता/मास्टर मॉडल गुजर रहे हैं।
आंशिक दृश्य देखें Picts.cshtml (पूरे फ़ाइल सामग्री दिखाया गया है)
@model IEnumerable<MVCApp3.Models.Picts>
@{
var pictsgrid = new WebGrid(Model);
}
@pictsgrid.GetHtml(
tableStyle: "grid",
displayHeader: false,
alternatingRowStyle: "alt",
columns: pictsgrid.Columns(
pictsgrid.Column(format:@<text><img src="@Url.Content("~/Content/Users/" + @item.FileName)" alt="@item.ImageID" width="200" />
@Html.ActionLink(linkText: "Delete", actionName: "DeletePicture", routeValues: new { id = @item.ImageID })
</text>)
))
नियंत्रक IdentityController.cs
डेटा सामग्री को व्यूडाटा ["MyPartialViewModelKeyName"] में सेट करें, जो आपके आंशिक दृश्य का उपभोग करेगा। आप शब्दकोश कुंजी को जो भी नाम चाहते हैं उसे दे सकते हैं, लेकिन मैंने इसे आंशिक vi के साथ संगत होने के लिए ViewData ["Picts"] दिया ईवी फ़ाइल नाम और इसकी दृश्य मॉडल वर्ग परिभाषा।
क्योंकि चित्र एकाधिक उपयोगकर्ताओं के बीच साझा किए जा सकते हैं, इसलिए उपयोगकर्ता द्वारा संबंधित, या साझा किए गए चित्रों को वापस करने के लिए नेस्टेड सेल्स और आंतरिक जोड़ों का उपयोग करके एंटीटी फ्रेमवर्क में संबंधित पीआईटीए क्वेरी के साथ कई से अधिक तालिका होती है। :
public class IdentityController : Controller
{
private EzPL8Entities db = new EzPL8Entities();
// GET: /Identity/Edit/5
[Authorize]
public ActionResult Edit(int? id)
{
if (id == null)
return new HttpNotFoundResult("This doesn't exist");
// get main form data
ezpl8_UsersPhysicalIdentity ezIDobj = db.ezpl8_UsersPhysicalIdentity.Find(id)
// http://learnentityframework.com/LearnEntityFramework/tutorials/many-to-many-relationships-in-the-entity-data-model/
// get partial form data for just this user's pictures
ViewData["Picts"] = (from user in db.ezpl8_Users
from ui in user.ezpl8_Images
join image in db.ezpl8_Images
on ui.ImageID equals image.ImageID
where user.ezpl8_UserID == id
select new Picts
{
FileName = image.FileName,
ImageID = image.ImageID
}
).ToList();
return View(ezIDobj);
}
// Here's the Partial View Controller --not much to it!
public ViewResult Picts(int id)
{
return View(ViewData["Picts"]);
}
[Authorize] //you have to at least be logged on
public ActionResult DeletePicture(int id)
{
//ToDo: better security so a user can't delete another user's picture
// TempData["ezpl8_UserID"]
ezpl8_Images i = db.ezpl8_Images.Find(id);
if (i != null)
{
var path = System.IO.Path.Combine(Server.MapPath("~/Content/Users"), i.FileName);
System.IO.File.Delete(path: path);
db.ezpl8_Images.Remove(i);
db.SaveChanges();
}
return Redirect(Request.UrlReferrer.ToString());
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
बहुत निकट से संबंधित प्रश्न: http://stackoverflow.com/questions/6549541/how-to-pass-parameters-to-a-partial-view-in-asp- MagicSauce उपयोग –