يعرض ASP.NET MVC عرض الحلاقة جزئية كخطأ سلسلة؟

أستخدم هذا الرمز لمحاولة عرض جزء جزئي من الشفرة كسلسلة لأغراض إرسال بريد إلكتروني.

    public static string RenderPartialToString(
        string userControlPath,
        object viewModel,
        ControllerContext controllerContext,
        TempDataDictionary tempData)
    {
        using (var writer = new StringWriter())
        {
            var viewDataDictionary = new ViewDataDictionary(viewModel);
            var view = new WebFormView(controllerContext, userControlPath);
            var viewContext = new ViewContext(
                controllerContext,
                view,
                viewDataDictionary,
                tempData,
                writer
                );

            viewContext.View.Render(viewContext, writer);

            return writer.GetStringBuilder().ToString();
        }

    }

المشكلة هي أن أحصل على الخطأ التالي:

must derive from ViewPage, ViewPage, ViewUserControl, or ViewUserControl. Stack Trace:  at  System.Web.Mvc.WebFormView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) at .... RenderPartialToString

كيف أصلح ذلك؟

0

1 إجابة

في الواقع ، لا يرث WebFormView من الفئات المذكورة ، فقط IView . لقد أجريت بحثًا صغيرًا من Google وحصلت على نموذج أولي للعمل. كانت هذه الصفحة الأكثر فائدة.

لقد قمت بإنشاء تطبيق MVC3 فارغ وقمت بإنشاء HomeController . عندما أقوم بتشغيل التطبيق ، تعرض الصفحة السلسلة التي تم تقديمها. يوضح متغير resultAsString كيفية التقاط العرض كسلسلة.

using System;
using System.IO;
using System.Web.Mvc;

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var result = RenderPartial(this.ControllerContext, "This is @DateTime.Now right now");
        var resultAsString = result.Content;
        return result;          
    }

    private ContentResult RenderPartial(ControllerContext controllerContext, string template)
    {
        var temporaryViewPath = string.Format("~/Views/{0}.cshtml", Guid.NewGuid());
        using (var stringWriter = new StringWriter())
        {
            using (var fileStream = System.IO.File.Create(Server.MapPath(temporaryViewPath)))
            {
                using (var streamWriter = new StreamWriter(fileStream))
                {                       
                    streamWriter.WriteLine(template);
                    streamWriter.Close();
                }
                fileStream.Close();
            }
            var razor = new RazorView(controllerContext, temporaryViewPath, null, false, null);
            razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(), new TempDataDictionary(), stringWriter), stringWriter);
            System.IO.File.Delete(Server.MapPath(temporaryViewPath));
            return Content(stringWriter.ToString());
        }
    }
}
0
وأضاف
هل ستتمكن من تحديد بعض الرموز؟ ما الذي يجب تحديده بالضبط؟
وأضاف المؤلف Andy, مصدر
لقد أرسلت رمزًا من نموذج أولي يعمل. يختلف توقيع الطريقة ، ولكن يجب أن تكون قادرًا على تهيئته وفقًا لاحتياجاتك.
وأضاف المؤلف neontapir, مصدر