সি # কোডে এইচটিএমএল তৈরি করার সর্বোত্তম উপায় কী? [বন্ধ]


15

আমার বিশ্বাস আছে যে মার্কআপটি পিছনের কোডটিতে নয়, মার্ক-আপে থাকা উচিত।

আমি এমন পরিস্থিতিতে এসেছি যেখানে আমি মনে করি পেছনের কোডটিতে এইচটিএমএল তৈরি করা গ্রহণযোগ্য। সেরা অনুশীলনগুলি কী বা কী হওয়া উচিত সে সম্পর্কে আমি কিছুটা sensক্যমত্য রাখতে চাই।

পিছনের কোডটিতে এইচটিএমএল তৈরি করা কখন গ্রহণযোগ্য? এই এইচটিএমএল তৈরির সেরা পদ্ধতি কী? (উদাহরণ: স্ট্রিংস, স্ট্রিংবিল্ডার, এইচটিএমএল রাইটার, ইত্যাদি)


টেমপ্লেট এবং স্থানধারক ব্যবহার করার চেষ্টা করুন যেখানে আপনি এই এইচটিএমএল চিহ্নিত করতে পারেন sp
ইউসুবভ

5
অন্য বিকল্প: আপনার ডেটা মডেলের উপর ভিত্তি করে এক্সএমএল উত্পাদন করুন এবং তারপরে এক্সএমএলকে এইচটিএমএল রূপান্তর করতে এক্সএসএলটি ব্যবহার করুন।
হতাশ

এইমাত্র এইচটিএমএল 5 এর জন্য সি # / এক্সএএমএলএল সবেমাত্র আমার নজরে এসেছিল, আশাব্যঞ্জক দেখাচ্ছে এবং আপনার দৃশ্যের সাথে মানানসই হতে পারে। cshtML5.com
সফটভেদ

এক্সএসএলটি রুটের সমস্যাটি স্থানীয়করণে। আপনার যদি দুটি ভাষা প্রয়োজন হয় তবে আপনার দুটি এক্সএসএলটি স্টাইলশিট প্রয়োজন এবং সেগুলি সমান্তরাল রাখুন। ওটা নরক। সি # থেকে কোনও পাঠ্য ফাইলে কেবল HTML লিখুন। স্ট্রিং.ফর্ম্যাট এবং P ".. {ভেরিয়েবল} ..." একসাথে ডাব্লুপিএফএললাইজেশন ব্যবহার করবেন?
এরিক

উত্তর:


12

রেজারের মতো কিছু ব্যবহার করা কি এখানে প্রযোজ্য নয়? কারণ আপনি যদি ভিউ ইঞ্জিন ব্যবহার করে অনেক এইচটিএমএল জেনারেশন করছেন তবে এটি অনেক সহজ করে তুলতে পারে। এটি এএসপি.এনইটির বাইরে ব্যবহারের জন্যও নির্মিত হয়েছিল।

তবে কখনও কখনও এটি আপনার প্রয়োজন মতো হয় না। আপনি ট্যাগবিল্ডার ক্লাসটি। নেট (এমভিসি) এর অংশ যা ব্যবহার করে তা বিবেচনা করেছেন ? রয়েছে HtmlWriter System.Web.UI মধ্যে (যে ওয়েব ফর্ম জন্য)। আপনি যদি তৈরি করেন Controlsবা করেন তবে আমি এর মধ্যে একটির প্রস্তাব দেব Html Helpers


3
+1, যদি কোনও অ্যাপ রেজারের মধ্যে আপনার টেম্প্লেটিং দরকার হয় তবেই যাওয়ার উপায়। রেজিওরঙ্গাইন @ nuget.org/packages/RazorEngine দেখুন যদি আপনার কোনও অ-এসপিএন অ্যাপ্লিকেশনের মধ্যে রেজার মাউন্ট করার জন্য দুর্দান্ত বিকল্পের প্রয়োজন হয়।
ওয়াইয়াট বার্নেট

1
আমার অনুরূপ প্রয়োজনীয়তা রয়েছে যেখানে আমার ক্লাস লাইব্রেরিতে এইচটিএমএল (এটির বোঝা) উত্পন্ন করতে হবে। আমি এর জন্য রেজার ব্যবহার করতে চাই তবে কীভাবে একটি ডেলিতে সিএসটিএমএল ফাইল বজায় রাখা যায় তা বোঝার জন্য সংগ্রাম করি। এটি কিভাবে একসাথে বান্ডিল করতে পারে?
যশভিট

আপনি কেবল যেকোন স্ট্রিংয়ে পাস করতে পারবেন স্ট্যাকওভারফ্লো.com
ড্যানিয়েল লিটল

14

আমি এইচটিএমএল অ্যাগ্রিলিটি প্যাকটি এইচটিএমএল একত্রিত করার জন্য ব্যবহার করব এবং তারপরে এটি কোনও পাঠ্য ফাইলে লিখব।

এইচটিএমএল অ্যাগিলিটি প্যাককে শক্তিশালী এবং এইচটিএমএল-অনুবর্তী HTML- বান্ধব করে তুলতে প্রচুর ম্যান-ঘন্টা আউট হয়েছে ।

আমি মনে করি এটি এমনকি একটি নমুনা অ্যাপ্লিকেশন অন্তর্ভুক্ত যা এইচটিএমএল উত্পাদন করে।

হোম পৃষ্ঠা থেকে:

নমুনা অ্যাপ্লিকেশন:

পৃষ্ঠা ফিক্সিং বা জেনারেশন। আপনি নিজের পছন্দ মতো কোনও পৃষ্ঠা ঠিক করতে পারেন, ডোম সংশোধন করতে পারেন, নোড যুক্ত করতে পারেন, নোডগুলি অনুলিপি করতে পারেন, ভাল ... আপনি এটির নাম দিন।


5

এইচটিএমএল তৈরি করতে আমি htmltag ব্যবহার করব

উদাহরণ:

var tag = new HtmlTag("span")
    .Text("Hello & Goodbye")
    .AddClass("important")
    .Attr("title", "Greetings")

এবং তারপরে CSQuery যদি আমি এইচটিএমএল পার্স করতে চাই

উদাহরণ:

dom.Select("div > span")
    .Eq(1)
    .Text("Change the text content of the 2nd span child of each div");

2

এখানে অবশ্যই লাইব্রেরি রয়েছে যেমন এইচটিএমএল অ্যাগ্রিলিটি প্যাক যা আপনাকে এই প্রচেষ্টাগুলিতে সহায়তা করতে পারে।

আপনি যদি সত্যই বিদ্যমান লাইব্রেরিটি ব্যবহার করতে না চান এবং সহজ, নিচে এবং নোংরা কোড চান তবে আমার পূর্ববর্তী জবাবের মতো কিছু আচরণ বিমূর্ত করার ধারণাটি পছন্দ করি। আমি বেশ কয়েকটি কারণে স্ট্রিংয়ের বিপরীতে অন্তর্নিহিত স্ট্রিংবিল্ডার ব্যবহার করার ধারণাটিও পছন্দ করি:

  1. স্ট্রিং বিল্ডারের চেয়ে স্ট্রিংগুলি কম দক্ষ
  2. স্ট্রিংবিল্ডার একটি ইনডেক্সযোগ্য ডেটা স্ট্রাকচার,

যদি আমার ব্যাপক ইঞ্জিনিয়ারিং এইচটিএমএল ইঞ্জিনের প্রয়োজন না হয় তবে আমি একটি সাধারণ, স্বজ্ঞাত ইন্টারফেস তৈরি করব

AddLineBreak();
AddSimpleTag(string tagName);
AddSimpleTagAt(string tagName, string content, int index);
Output();

1
ইনডেক্সযোগ্য ডেটা কাঠামো বাধ্যতামূলক, তবে আমি দক্ষতা সম্পর্কে খুব বেশি চিন্তা করব না : কোডিংহরর.ব্লগ
জিম জি।

1
স্ট্রিংসের ভারাক্রমে আমি কয়েকবার আদায় করেছি, বিশেষত সত্যই বড় বড় স্ট্রিং। স্ট্রিংবিল্ডাররা বড় হওয়ার সাথে সাথে আরও মেমরি দক্ষ এবং প্রসেসর দক্ষ। সুতরাং, এর মতো একটি বাস্তবায়নে, যেখানে এইচটিএমএল সত্যিই বড় হতে পারে, আমি একটি স্ট্রিংবিল্ডার দিয়ে শুরু করব। যদি এই নিশ্চয়তা থাকে যে এইচটিএমএল খুব বড় হবে না, তবে একটি স্ট্রিং অবশ্যই পর্যাপ্ত হবে।
টিম সি

1
ঠিক আছে যদি এইচটিএমএল সত্যিই বড় হয়ে উঠতে পারে তবে আমি অবশ্যই এইচটিএমএল অ্যাগিলিটি প্যাকটি সুপারিশ করব। [আমি আসলে এইচটিএমএল এগ্রিলিটি প্যাকটি সুপারিশ করেছিলাম আপনি যা করার দুই মিনিট আগে। :)]
জিম জি।

1

যদি আপনি কেবল স্ট্রিং ব্যবহার করে শেষ করেন তবে আপনার আউটপুট ডেটাতে সমস্ত HTML সংরক্ষিত অক্ষরগুলি এড়াতে ভুলবেন না।

&    &
>    >
<    &lt;
"    &quot;
'    &apos;

যদিও আমি সরাসরি স্ট্রিংয়ের সাথে কাজ করার পরিবর্তে এইচটিএমএল-সচেতন শ্রেণি বা লাইব্রেরি ব্যবহার করার পরামর্শ দিই। এইচটিএমএল রাইটার দেখতে বেশ ভাল একটি সূচনা বলে মনে হচ্ছে।


এই অন্তর্দৃষ্টি জন্য আপনাকে ধন্যবাদ। যে কেউ এটি পড়তে পারে তার জন্য, আমি এটি কোনও আইটেম টেম্পলেটে ডেটাটেবলের মানগুলি পাস করতে ব্যবহার করি। কীটি (মাইক ক্লার্কের পরামর্শ মতো) এইচটিএমএল সচেতন হতে হবে: <আস্প: বোতাম আইডি = "বিটিএনএডিট" সিএসএসক্লাস = "বিটিএনম্যাটওয়ার্কস্মল" রানাত = "সার্ভার" টেক্সট = "উইজজিগ" অনক্লিয়েন্টক্লিক = '<% # স্ট্রিং.ফর্ম্যাট ("ওপেনচিল্ডইন্টারনেট (& apos; {0} & apos;, & apos; {1} & apos;, & apos; {2} & apos;); ", ইভাল (" কারসাস "), ইভাল (" ওমসক্রিজিং "), ইভাল (" ওপমার্কিং "))% > '/>
রিয়েল_ইগড্রেসিল

-1

মূল পোস্টের প্রায় দু'বছর পরে - এখানে এমন একটি সমাধান রয়েছে যা আমার পক্ষে ভালভাবে কাজ করেছে। লক্ষ্য নথিতে আমি নিম্নলিখিতটি রাখি:

<table>    
    <%:theHtmlTableMomToldYouAbout() %>    //# Where I want my rows of table data to go
</table>

ডাকা ফাংশনটি দেখতে এরকম দেখাচ্ছে:

    public HtmlString theHtmlTableMomToldYouAbout()
    {
        string content = "";
        HtmlString theEnvelopePlease = null;

        for (int i = 0; i < 5; i++)
        {
            content = content + "<tr><td>The Number Is: " + i + "</td></tr>";
        }
        theEnvelopePlease = new HtmlString(content);
        return theEnvelopePlease;      
    }

এবং ব্রাউজারে ফলাফল আউটপুট আশানুরূপ:
সংখ্যাটি হল: 0
সংখ্যাটি: 1
নম্বরটি: 2
সংখ্যাটি: 3
সংখ্যাটি: 4

আমি উত্স দেখতে গেলে আমি নিম্নলিখিতগুলি খুঁজে পাই:

<table>
    <tr><td>The Number Is: 0</td></tr>
    <tr><td>The Number Is: 1</td></tr>
    <tr><td>The Number Is: 2</td></tr>
    <tr><td>The Number Is: 3</td></tr>
    <tr><td>The Number Is: 4</td></tr>
</table>

1
আমি উল্লেখ করব যে আপনার সমাধানটিতে একই বিষয়গুলির অনেকগুলি 'বিষয়বস্তু'র সাথে একটি অপরিবর্তনীয় স্ট্রিং হিসাবে এই প্রশ্নের কম স্কোরিং পোস্টগুলিতে বর্ণিত।

-1

শিখা!

var html = "";
html += "<table class='colorful'>";
foreach(var item in collection) {
     html += "<tr>";
     html += "<td class='boldCell'>" + item.PropWhatever + "</td>";
     // more cells here as needed
     html += "</tr>";
}
html += "</table>";
placeholder1.InnerHtml = html;

আমি সম্ভবত এটির জন্য নিম্নমুখী হয়ে উঠব, তবে প্রাক্তন ডিজাইনার হিসাবে যাকে প্রকৃতপক্ষে .NET সম্পর্কে অনেক কিছু জানার আগে কোডে এইচটিএমএল টুইঙ্ক করতে হয়েছিল, এইচটিএমএল তৈরির বিমূর্ত পদ্ধতিগুলির চেয়ে উপরের কোডটি বোঝা সহজ ছিল। আপনি যদি ভাবেন যে কোনও ডিজাইনারকে আপনার এইচটিএমএলটি টুইঙ্ক করতে হতে পারে তবে এর মতো সরল স্ট্রিং ব্যবহার করুন।

কোডে এইচটিএমএল লেখার সময় আমি অনেকগুলি ডিভস মিস করি যা এইচটিএমএলে, একক বা ডাবল উদ্ধৃতিগুলিকে বৈশিষ্ট্যের জন্য অনুমোদিত। সুতরাং কোডে সমস্ত উদ্ধৃতিগুলি (যেটি অ-দীক্ষিতদের কাছে ন্যস্ত বলে মনে হচ্ছে) এড়ানোর পরিবর্তে কেবল আপনার স্ট্রিংয়ের মধ্যে এইচটিএমএল উদ্ধৃতিগুলির জন্য একক উদ্ধৃতি ব্যবহার করুন।


ঠিক আছে। আপনারা সকলকে ঘৃণা করেন স্ট্রিং কনটেন্টেশন ছাড়াই এটি করার 'যথাযথ' উপায়, তবে আমি আমার মতে দাঁড়িয়ে আছি যে সাধারণ টেবিল সহ যে কোনও সাধারণ পৃষ্ঠা কোনও হাস্যকর গুগল-জাতীয় স্কেলের বাইরে কোনও কার্যকারিতা সমস্যা উপস্থিত করবে না:

var sb = new System.Text.StringBuilder();
sb.Append("<table class='colorful'>");
foreach (var item in collection)
{
     sb.Append("<tr>");
     sb.Append("<td class='boldCell'>" + item.PropWhatever + "</td>");
     // more cells here as needed
     sb.Append("</tr>");
}
sb.Append("</table>");
placeholder1.InnerHtml = sb.ToString();

3
লুপগুলিতে স্ট্রিং কনটেনেট করতে -1 ব্যবহার করা আপনার পক্ষে সবচেয়ে খারাপ কাজ।
ড্যানিয়েল লিটল


আচ্ছা, শুরু করার জন্য, +=কোনও লুপের ভিতরে এভাবে ব্যবহার করা মোটেও মাপবে না; স্ট্রিংগুলি অপরিবর্তনীয় কারণ আপনি প্রতিবার এটি করার সময় একটি নতুন স্ট্রিং তৈরি করছেন। StringBuilderপরিবর্তে ব্যবহার করুন ।
রবার্ট হার্ভে

3
যে লোকেরা ভয়ঙ্কর কোড লেখেন তাদের কেন তাদের ভয়াবহ কোডটি অন্য লোকদের সাথে ভাগ করে নিতে হবে।
রামহাউন্ড

3
@ রামহাউন্ড সম্পর্কে কী If you think a designer might ever have to tweak your HTML, use simple strings like this.বোঝা মুশকিল? কিছু লোকের সংজ্ঞাটি হ'ল ভয়ঙ্কর কোডটি হ'ল সম্পূর্ণরূপে বুঝতে কয়েক সেকেন্ড সময় ব্যয় করে পারফরম্যান্সের মিলি সেকেন্ড কিনে। স্পষ্টতই যখন আপনি অনুমান করেন যে আপনার কোডটি স্বতন্ত্রতম সর্বনিম্ন সাধারণ ডিনোমিনেটর দ্বারা দেখা বা রক্ষণাবেক্ষণ করা হচ্ছে তখন কেসটি অবশ্যই তৈরি করা যেতে পারে যে বোঝার বা টুইট করা সহজতর লেখার কোডটি সর্বদা পরিষ্কার বা সেরা সম্পাদনকারী কোডের চেয়ে ভাল।
ম্যাপেল_শ্যাফ্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.