আমি কীভাবে এএসপি.নেটে আরও নিয়ন্ত্রণ নিতে পারি?


124

আমি একটি খুব, খুব সাধারণ "মাইক্রো-ওয়েব অ্যাপ্লিকেশন" তৈরির চেষ্টা করছি যা আমি সন্দেহ করি যে এটি যদি আমি কখনও সম্পন্ন করি তবে কয়েকটি স্ট্যাক ওভারফ্লো'র পক্ষে আগ্রহী। আমি এটি ডিপথ সাইটে আমার সি # তে হোস্টিং করছি, যা ভ্যানিলা এএসপি। নেট 3.5 (অর্থাত্ এমভিসি নয়)।

প্রবাহ খুব সহজ:

  • যদি কোনও ব্যবহারকারী কোনও ইউআরএল দিয়ে অ্যাপ্লিকেশনটিতে প্রবেশ করে যা সমস্ত পরামিতি নির্দিষ্ট করে না (বা যদি সেগুলির মধ্যে কোনও অবৈধ থাকে) আমি কেবল ব্যবহারকারী ইনপুট নিয়ন্ত্রণগুলি প্রদর্শন করতে চাই। (মাত্র দুটি আছে।)
  • একটি ব্যবহারকারী একটি URL যা দিয়ে অ্যাপ্লিকেশন প্রবেশ করে না সমস্ত প্রয়োজনীয় পরামিতি আছে, আমি ফলাফল প্রদর্শন করতে চান এবং ইনপুট নিয়ন্ত্রণ (তাই তারা পরামিতি পরিবর্তন করতে পারেন)

এখানে আমার স্ব-আরোপিত প্রয়োজনীয়তা (নকশা এবং প্রয়োগের মিশ্রণ):

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

এর বেশিরভাগই ঠিক আছে, তবে ভিউস্টেটটি পুরোপুরি সরিয়ে এবং দরকারী কার্যকারিতা বাকী রাখার কোনও উপায় আমি পাইনি। এই ব্লগ পোস্টটি থেকে পোস্টটি ব্যবহার করে আমি ভিউস্টেটের জন্য কোনও আসল মান পাওয়া এড়াতে সক্ষম হয়েছি - তবে এটি এখনও ইউআরএলটিতে প্যারামিটার হিসাবে শেষ হয় যা দেখতে সত্যিই কুৎসিত দেখাচ্ছে।

যদি আমি runat="server"এএসপি.এনইটি ফর্মের পরিবর্তে এটি একটি সরল এইচটিএমএল ফর্ম হিসাবে তৈরি করি (অর্থাত্ গ্রহণ কর ) তবে আমি কোনও যাদু দেখার ভিস্টেট পাই না - তবে আমি প্রোগ্রামগুলি নিয়ন্ত্রিতভাবে অ্যাক্সেস করতে পারি না।

আমি বেশিরভাগ এএসপি.এনইটি উপেক্ষা করে এবং এক্সকিএমএল ডকুমেন্টকে লিনকিউ থেকে এক্সএমএল তৈরি করে এবং প্রয়োগ করে এই সমস্ত কিছুই করতে পারি IHttpHandler। যদিও এটি কিছুটা নিচু স্তরের বোধ করে।

আমি বুঝতে পারি যে আমার সমস্যাগুলি আমার সীমাবদ্ধতাগুলি শিথিল করে (যেমন POST ব্যবহার করে এবং উদ্বৃত্ত প্যারামিটারের যত্ন না নেওয়া) বা এএসপি.নেট এমভিসি ব্যবহার করে সমাধান করা যেতে পারে তবে আমার প্রয়োজনীয়তা কি আসলেই অযৌক্তিক?

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

কোন চিন্তা, কেউ? (শক্তিধররা কীভাবে পতিত হয়েছে ইত্যাদি সম্পর্কে কিউ মন্তব্যগুলি ঠিক আছে - আমি আশা করি আমি কখনও এএসপি.এনইটি বিশেষজ্ঞ হিসাবে দাবি করিনি, কারণ সত্যটি একেবারে বিপরীত ...)


16
"শক্তিশালীরা কীভাবে পড়েছে তার কিউ মন্তব্য" - আমরা সকলেই বিভিন্ন বিষয় সম্পর্কে অবজ্ঞ। আমি সম্প্রতি এখানে অংশ নেওয়া শুরু করেছি, তবে আমি সমস্ত পয়েন্টের চেয়ে প্রশ্নটির প্রশংসা করি। আপনি সম্ভবত এখনও চিন্তা এবং শিখছেন। আপনাকে কুডোস
ডাফাইমো

15
আমি মনে করি না যে আমি কখনও কারও দিকে মনোযোগ দেব যিনি পড়াশোনা ছেড়ে দিয়েছেন :)
জন স্কিটি

1
সাধারণ ক্ষেত্রে সত্য। কম্পিউটার বিজ্ঞানে খুব সত্য।
মেহরদাদ আফশারি

3
এবং আপনার পরবর্তী বইটি "গভীরতার মধ্যে এএসপি.এনইটি" হবে? :
পি

20
হ্যাঁ, এটি 2025 সালে শেষ হবে;)
জন স্কিটি

উত্তর:


76

এই সমাধান আপনাকে নিয়ন্ত্রণগুলিতে সমস্ত বৈশিষ্ট্য সহ পুরোপুরি নিয়ন্ত্রণগুলিতে প্রোগ্রামিক অ্যাক্সেস দেয়। এছাড়াও, জমা দেওয়ার পরে কেবলমাত্র পাঠ্য বাক্সের মানগুলি ইউআরএলে উপস্থিত হবে যাতে আপনার জিইটি অনুরোধের URL আরও "অর্থবহ" হয়ে উঠবে

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="JonSkeetForm.aspx.cs" Inherits="JonSkeetForm" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Jon Skeet's Form Page</title>
</head>
<body>
    <form action="JonSkeetForm.aspx" method="get">
    <div>
        <input type="text" ID="text1" runat="server" />
        <input type="text" ID="text2" runat="server" />
        <button type="submit">Submit</button>
        <asp:Repeater ID="Repeater1" runat="server">
            <ItemTemplate>
                <div>Some text</div>
            </ItemTemplate>
        </asp:Repeater>
    </div>
    </form>
</body>
</html>

তারপরে আপনার কোড-পিছনে আপনি পেজলডে যা যা প্রয়োজন তা করতে পারেন

public partial class JonSkeetForm : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        text1.Value = Request.QueryString[text1.ClientID];
        text2.Value = Request.QueryString[text2.ClientID];
    }
}

আপনি যদি এমন কোনও ফর্ম না চান runat="server"তবে আপনার এইচটিএমএল নিয়ন্ত্রণগুলি ব্যবহার করা উচিত। আপনার উদ্দেশ্যে কাজ করা আরও সহজ। কেবল নিয়মিত এইচটিএমএল ট্যাগ ব্যবহার করুন runat="server"এবং তাদের একটি আইডি দিন এবং দিন। তারপরে আপনি এগুলিকে প্রোগ্রামগতভাবে এবং কোড অ্যাক্সেস করতে পারেন ViewState

একমাত্র ক্ষতিটি হ'ল আপনার পক্ষে অনেকগুলি "সহায়ক" ASP.NET সার্ভার নিয়ন্ত্রণগুলির মতো অ্যাক্সেস পাবেন না GridView। আমি Repeaterআমার উদাহরণটিতে একটি অন্তর্ভুক্ত করেছি কারণ আমি Repeaterধরেই নিচ্ছি যে ফলাফলগুলি একই পৃষ্ঠায় আপনার ক্ষেত্রগুলি রাখতে চান এবং (আমার জ্ঞানের কাছে) কেবলমাত্র ডাটাবাউন্ড নিয়ন্ত্রণ যা runat="server"ফর্ম ট্যাগটিতে কোনও বৈশিষ্ট্য ছাড়াই চলবে ।


1
আমি খুব কম ক্ষেত্র পেয়েছি যে ম্যানুয়ালি এটি করা সত্যিই সহজ :) মূল কথাটি আমি জানতাম না যে আমি সাধারণ এইচটিএমএল নিয়ন্ত্রণের সাথে রানাত = সার্ভার ব্যবহার করতে পারি। আমি ফলাফলগুলি এখনও কার্যকর করিনি, তবে এটি সহজ কিছু। প্রায় আছে!
জন স্কিটি

প্রকৃতপক্ষে, কোনও <ফর্ম রানাত = "সার্ভার"> আপনি পৃষ্ঠা স্তরে সক্ষম ভিউস্টেট = "মিথ্যা" সেট করার পরেও __VIEWSTATE (এবং কিছু অন্যান্য) লুকানো ক্ষেত্র যুক্ত করবে। আপনি যদি পৃষ্ঠার ভিউস্টেটটি আলগা করতে চান তবে এটি যাওয়ার উপায়। ইউরাল বন্ধুত্বের হিসাবে, urlrewriting একটি বিকল্প হতে পারে।
সেরগিউ ডামিয়ান

1
নতুন করে লেখার দরকার নেই। এই উত্তরটি দুর্দান্ত কাজ করে (যদিও এর অর্থ "ব্যবহারকারীর" আইডি থাকা নিয়ন্ত্রণ রয়েছে - কোনও কারণে আমি কোনও আইডি থেকে পাঠ্যবক্স নিয়ন্ত্রণের নাম পরিবর্তন করতে পারি না)।
জন স্কিটি

1
শুধু নিশ্চিত করতে, এটি সত্যিই খুব ভাল কাজ করেছে। অনেক ধন্যবাদ!
জন স্কিটি

14
দেখে মনে হচ্ছে আপনার এটি কেবল ক্লাসিক এএসপিতে লেখা উচিত ছিল!
স্কটএইউ

12

আপনার ফরমে ট্যাগে রানাত = "সার্ভার" ব্যবহার না করে আপনি অবশ্যই (আইএমএইচও) সঠিক পথে রয়েছেন। এর অর্থ হ'ল আপনাকে এই অনুরোধটির মতোই সরাসরি অনুরোধ.কুইয়ারিস্ট্রিং থেকে মানগুলি বের করতে হবে:

.Aspx পৃষ্ঠায় নিজেই:

<%@ Page Language="C#" AutoEventWireup="true" 
     CodeFile="FormPage.aspx.cs" Inherits="FormPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>ASP.NET with GET requests and no viewstate</title>
</head>
<body>
    <asp:Panel ID="ResultsPanel" runat="server">
      <h1>Results:</h1>
      <asp:Literal ID="ResultLiteral" runat="server" />
      <hr />
    </asp:Panel>
    <h1>Parameters</h1>
    <form action="FormPage.aspx" method="get">
    <label for="parameter1TextBox">
      Parameter 1:</label>
    <input type="text" name="param1" id="param1TextBox" value='<asp:Literal id="Param1ValueLiteral" runat="server" />'/>
    <label for="parameter1TextBox">
      Parameter 2:</label>
    <input type="text" name="param2" id="param2TextBox"  value='<asp:Literal id="Param2ValueLiteral" runat="server" />'/>
    <input type="submit" name="verb" value="Submit" />
    </form>
</body>
</html>

এবং কোড পিছনে:

using System;

public partial class FormPage : System.Web.UI.Page {

        private string param1;
        private string param2;

        protected void Page_Load(object sender, EventArgs e) {

            param1 = Request.QueryString["param1"];
            param2 = Request.QueryString["param2"];

            string result = GetResult(param1, param2);
            ResultsPanel.Visible = (!String.IsNullOrEmpty(result));

            Param1ValueLiteral.Text = Server.HtmlEncode(param1);
            Param2ValueLiteral.Text = Server.HtmlEncode(param2);
            ResultLiteral.Text = Server.HtmlEncode(result);
        }

        // Do something with parameters and return some result.
        private string GetResult(string param1, string param2) {
            if (String.IsNullOrEmpty(param1) && String.IsNullOrEmpty(param2)) return(String.Empty);
            return (String.Format("You supplied {0} and {1}", param1, param2));
        }
    }

এখানে কৌশলটি হ'ল আমরা পাঠ্য ইনপুটগুলির মান = "" বৈশিষ্ট্যের অভ্যন্তরে এএসপি.এনইটি ল্যাটারালগুলি ব্যবহার করছি, সুতরাং পাঠ্য বাক্সগুলিকে নিজেরাই রান্যাট = "সার্ভার" করতে হবে না। ফলাফলগুলি তখন একটি এএসপি'র মধ্যে আবৃত হয়: প্যানেল এবং আপনি কোনও ফলাফল প্রদর্শন করতে চান কিনা তা নির্ভর করে পৃষ্ঠা লোডে দৃশ্যমান সম্পত্তি সেট করা হয়।


এটি বেশ ভালভাবে কাজ করে, তবে ইউআরএলগুলি স্ট্যাকওভারফ্লো হিসাবে, বন্ধুত্বপূর্ণ হবে না।
মেহরদাদ আফশারি

1
ইউআরএলগুলি বেশ বন্ধুত্বপূর্ণ হবে, আমার মনে হয় ... এটি সত্যিই ভাল সমাধানের মতো দেখাচ্ছে।
জন স্কিটি

আরেগ, আমি আপনার টুইটগুলি আগে পড়েছিলাম, এটি নিয়ে গবেষণা করেছি এবং এখন আমি আপনার প্রশ্নটি আমার বাচ্চাদের বাথটাবের জন্য প্রস্তুত করার জন্য মিস করেছি ... :-)
স্প্ল্যাটনে

2

ঠিক আছে জোন, প্রথমে ভিউস্টেট ইস্যু:

২.০ থেকে কোনও ধরণের অভ্যন্তরীণ কোড পরিবর্তন হয়েছে কিনা তা আমি পরীক্ষা করে দেখিনি তবে কয়েক বছর আগে ভিউস্টেট থেকে মুক্তি পেতে আমি কীভাবে পরিচালনা করেছি here প্রকৃতপক্ষে সেই লুকানো ক্ষেত্রটি এইচটিএমএলফর্মের অভ্যন্তরে হার্ডকোডযুক্ত যাতে আপনার নিজের নতুন চিত্রটি বের করা উচিত এবং নিজের কলগুলি করার জন্য এর রেন্ডারিংয়ের পদক্ষেপ নেওয়া উচিত। নোট করুন যে আপনি যদি পুরানো ইনপুট নিয়ন্ত্রণগুলি আটকে থাকেন (তবে আমার ধারণা আপনি এটি করতে চান যেহেতু এটি ক্লায়েন্টের উপর জেএস প্রয়োজন হয় না):

protected override void RenderChildren(System.Web.UI.HtmlTextWriter writer)
{
    System.Web.UI.Page page = this.Page;
    if (page != null)
    {
        onFormRender.Invoke(page, null);
        writer.Write("<div><input type=\"hidden\" name=\"__eventtarget\" id=\"__eventtarget\" value=\"\" /><input type=\"hidden\" name=\"__eventargument\" id=\"__eventargument\" value=\"\" /></div>");
    }

    ICollection controls = (this.Controls as ICollection);
    renderChildrenInternal.Invoke(this, new object[] {writer, controls});

    if (page != null)
        onFormPostRender.Invoke(page, null);
}

সুতরাং আপনি সেই 3 টি স্থিতিশীল মেথডইনফোগুলি পেয়েছেন এবং সেই ভিউস্টেট অংশটি বাদ দিয়ে তাদের ডাকবেন;)

static MethodInfo onFormRender;
static MethodInfo renderChildrenInternal;
static MethodInfo onFormPostRender;

এবং এখানে আপনার ফর্মের ধরণের নির্মাতা:

static Form()
{
    Type aspNetPageType = typeof(System.Web.UI.Page);

    onFormRender = aspNetPageType.GetMethod("OnFormRender", BindingFlags.Instance | BindingFlags.NonPublic);
    renderChildrenInternal = typeof(System.Web.UI.Control).GetMethod("RenderChildrenInternal", BindingFlags.Instance | BindingFlags.NonPublic);
    onFormPostRender = aspNetPageType.GetMethod("OnFormPostRender", BindingFlags.Instance | BindingFlags.NonPublic);
}

যদি আমি আপনার প্রশ্নটি সঠিকভাবে পেতে পারি তবে আপনি পোষ্টকে আপনার ফর্মগুলির ক্রিয়া হিসাবে ব্যবহার করতে চান না তাই আপনি কীভাবে এটি করতে চান তা এখানে:

protected override void RenderAttributes(System.Web.UI.HtmlTextWriter writer)
{
    writer.WriteAttribute("method", "get");
    base.Attributes.Remove("method");

    // the rest of it...
}

আমার ধারণা এটি অনেক বেশি এটা কেমন চলছে আমাকে জানাও.

সম্পাদনা: আমি পৃষ্ঠা ভিউসেট পদ্ধতিগুলি ভুলে গেছি:

সুতরাং আপনার কাস্টম ফর্ম: এইচটিএমএলফর্মটি একেবারে নতুন বিমূর্ত (বা না) পৃষ্ঠা পেয়েছে: সিস্টেম. ওয়েবে.ইউ.আই. পৃষ্ঠা: পি

protected override sealed object SaveViewState()
{
    return null;
}

protected override sealed void SavePageStateToPersistenceMedium(object state)
{
}

protected override sealed void LoadViewState(object savedState)
{
}

protected override sealed object LoadPageStateFromPersistenceMedium()
{
    return null;
}

এক্ষেত্রে আমি পদ্ধতিগুলির কারণে সিল করতে পারি না কারণ আপনি পৃষ্ঠাটি সিল করতে পারবেন না (যদিও এটি বিমূর্ত না হলেও স্কট গুথ্রি এটি অন্য একটিতে আবৃত করবে: পি) তবে আপনি নিজের ফর্মটি সিল করতে পারবেন।


এর জন্য ধন্যবাদ - যদিও এটি অনেকটা কাজের মতো মনে হচ্ছে। ড্যানের সমাধানটি আমার পক্ষে ভাল কাজ করেছে, তবে আরও বিকল্প থাকা ভাল।
জন স্কিটি

1

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

সম্পাদনা: আমি ধরে নিয়েছি যে আপনি পৃষ্ঠায় সক্ষম ভিউস্টেট = "মিথ্যা" সেট করেছেন।


চমৎকার ধারণা. ঠিক আছে, এটি করতে বাধ্য হওয়ার দিক থেকে ভয়াবহ ধারণা, তবে এটি সম্ভবত
কার্যকরভাবে

এবং হ্যাঁ, আমি সক্ষম জায়গায় ভিউস্টেট = সমস্ত জায়গায় মিথ্যা চেষ্টা করেছি। এটি এটি সম্পূর্ণরূপে অক্ষম করে না, কেবল এটি কেটে দেয়।
জন স্কিটি

জন: আপনি যদি নিন্দিত সার্ভার নিয়ন্ত্রণগুলি ব্যবহার করেন না (কোনও রানাত = "সার্ভার" নেই) এবং আপনার কাছে কোনও <ফর্ম রানাত = "সার্ভার"> না থাকে তবে ভিউস্টেট কোনও সমস্যা হবে না। সে কারণেই আমি বলেছিলাম সার্ভার নিয়ন্ত্রণ ব্যবহার করবেন না। আপনি সর্বদা অনুরোধ.ফর্ম সংগ্রহ ব্যবহার করতে পারেন।
মেহরদাদ আফশারি

তবে নিয়ন্ত্রণগুলিতে রানাত = সার্ভার ব্যতীত, রেন্ডারিংয়ের সময় নিয়ন্ত্রণগুলিতে আবার মানটির প্রচার করতে ব্যথা হয়। ভাগ্যক্রমে, রানাত = সার্ভার সহ এইচটিএমএল নিয়ন্ত্রণগুলি ভালভাবে কাজ করে।
জন স্কিটি

1

আমি এমন একটি এইচটিটিপি মডিউল তৈরি করব যা রাউটিং পরিচালনা করে (এমভিসির অনুরূপ তবে পরিশীলিত নয়, কেবল কয়েকটি ifবিবৃতি) এবং এটি aspxবা ashxপৃষ্ঠাগুলিতে হস্তান্তর করে । aspxপৃষ্ঠার টেম্পলেটটি সংশোধন করা সহজ হওয়ায় এটিকে পছন্দ করা হয়। আমি ব্যবহার করবে না WebControlsaspxতবে। শুধু Response.Write

উপায় দ্বারা, জিনিসগুলি সহজ করার জন্য, আপনি মডিউলটিতে প্যারামিটারের বৈধতা করতে পারেন (এটি সম্ভবত রাউটিংয়ের সাথে কোডটি ভাগ করে দেয়) এবং এটিতে সংরক্ষণ করুন HttpContext.Itemsএবং তারপরে পৃষ্ঠাতে রেন্ডার করুন। এটি সমস্ত বেল এবং হুইসেল ছাড়াই এমভিসির মতো বেশ কাজ করবে will এটিই এএসপি.এনইটি এমভিসি দিনের আগে আমি অনেক কিছু করেছি।


1

আমি পুরোপুরি পৃষ্ঠা বর্গকে পুরোপুরি ত্যাগ করতে এবং ইউআরএল উপর ভিত্তি করে একটি বড় সুইচ কেস সহ প্রতিটি অনুরোধকে সামলানোর জন্য সত্যিই খুশি হয়েছি। ইভি "পৃষ্ঠা" একটি এইচটিএমএল টেমপ্লেট এবং এসি # অবজেক্টে পরিণত হয়। টেমপ্লেট ক্লাসটি একটি মূল সংগ্রহের সাথে তুলনা করে এমন একটি ম্যাচ ডেলিগেটের সাথে একটি রেগেক্স ব্যবহার করে।

সুবিধা:

  1. এটি সত্যিই দ্রুত, পুনর্নির্মাণের পরেও, প্রায় কোনও পিছিয়ে নেই (পৃষ্ঠা শ্রেণি অবশ্যই বড় হতে হবে)
  2. নিয়ন্ত্রণটি সত্যই দানাদার (এসইওর জন্য দুর্দান্ত, এবং জেএসের সাথে ভাল খেলতে ডিওএম তৈরি করে)
  3. উপস্থাপনাটি যুক্তি থেকে পৃথক
  4. jQuery এর এইচটিএমএল এর সম্পূর্ণ নিয়ন্ত্রণ রয়েছে

bummers:

  1. একটি সাধারণ পাঠ্য বাক্সে বেশ কয়েকটি স্থানে কোডের প্রয়োজন হয়, তবে এটি খুব ভালভাবে স্কেল করে
  2. পৃষ্ঠার দৃশ্য দিয়ে এটি করার জন্য সর্বদা প্ররোচিত হয় যতক্ষণ না আমি কোনও ভিউস্টেট (urgh) না দেখি তারপরে আমি বাস্তবে ফিরে যাই।

জোন, আমরা শনিবার সকালে এও করছি কি :)?


1
এখানে শনিবার সন্ধ্যা। এটা কি ঠিক আছে? (আমি আমার পোস্টিংয়ের সময় / দিনগুলির একটি বিচ্ছুরিত গ্রাফ দেখতে চাই, বিটিডাব্লু ...)
জন স্কিটি

1

আমি ভাবলাম আস্প: রিপিটার নিয়ন্ত্রণ অপ্রচলিত।

এএসপি.এনইটি টেম্পলেট ইঞ্জিনটি দুর্দান্ত তবে আপনি খুব সহজেই লুপের জন্য একটি দিয়ে পুনরাবৃত্তি করতে পারবেন ...

<form action="JonSkeetForm.aspx" method="get">
<div>
    <input type="text" ID="text1" runat="server" />
    <input type="text" ID="text2" runat="server" />
    <button type="submit">Submit</button>
    <% foreach( var item in dataSource ) { %>
        <div>Some text</div>   
    <% } %>
</div>
</form>

এএসপি.নেট ফর্মগুলি এক প্রকারের ঠিক আছে, ভিজ্যুয়াল স্টুডিওর পক্ষ থেকে উপযুক্ত সমর্থন রয়েছে তবে এই রানাত = "সার্ভার" জিনিসটি, এটি ঠিক ভুল। ভিউস্টেট থেকে

আমি আপনাকে এএসপি.নেট এমভিসি কে এত দুর্দান্ত করে তুলেছে সে সম্পর্কে একবার নজর রাখার পরামর্শ দিচ্ছি, কে এটি এএসপি.নেট ফর্মের পদ্ধতির থেকে দূরে সরিয়ে নিয়ে যায় all

এমনকি এনএইচএমএল এর মতো কাস্টম ভিউগুলি সংকলন করতে আপনি নিজের বিল্ড সরবরাহকারীর স্টাফ লিখতে পারেন। আমি মনে করি আপনার আরও নিয়ন্ত্রণের জন্য এখানে নজর দেওয়া উচিত এবং এইচটিটিপি মোড়ানোর জন্য এবং সিএলআর হোস্টিং পরিবেশ হিসাবে কেবল এএসপি.নেট রানটাইমের উপর নির্ভর করা উচিত। আপনি যদি ইন্টিগ্রেটেড মোড পরিচালনা করেন তবে আপনি এইচটিটিপি অনুরোধ / প্রতিক্রিয়াটিও হেরফের করতে সক্ষম হবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.