কিভাবে রেজারে "এইচটিএমএল.বেগিনফর্ম" লিখবেন


133

আমি যদি এভাবে লিখি:

ফর্ম ক্রিয়া = "চিত্রগুলি" পদ্ধতি = "পোস্ট" এনটাইটাইপ = "বহুগুণ / ফর্ম-ডেটা"

এটা কাজ করে।

তবে '@' দিয়ে রেজারে এটি কাজ করে না। আমি কি কোন ভুল করেছি?

@using (Html.BeginForm("Upload", "Upload", FormMethod.Post, 
                             new { enctype = "multipart/form-data" }))
{
    @Html.ValidationSummary(true)

    <fieldset>

        Select a file <input type="file" name="file" />
        <input type="submit" value="Upload" />

    </fieldset>
}

আমার নিয়ামকটি এর মতো দেখাচ্ছে:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Upload() 
{
    foreach (string file in Request.Files)
    {
        var uploadedFile = Request.Files[file];
        uploadedFile.SaveAs(Server.MapPath("~/content/pics") + 
                                      Path.GetFileName(uploadedFile.FileName));
    }

    return RedirectToAction ("Upload");
}

ক্রিয়াটি আসলে "চিত্রগুলি" বা এটি "আপলোড / আপলোড"?
জে. স্টেইন

আসলে আমার দুটি নিয়ামক রয়েছে। 'চিত্র' অ্যাকশন সহ চিত্র নিয়ন্ত্রক .. এবং আপলোড ক্রিয়াকলাপ সহ কন্ট্রোলার আপলোড করুন ..
kk-dev11

উত্তর:


200

নিম্নলিখিত কোডটি সূক্ষ্মভাবে কাজ করে:

@using (Html.BeginForm("Upload", "Upload", FormMethod.Post, 
                                      new { enctype = "multipart/form-data" }))
{
    @Html.ValidationSummary(true)
    <fieldset>
        Select a file <input type="file" name="file" />
        <input type="submit" value="Upload" />
    </fieldset>
}

এবং প্রত্যাশা অনুযায়ী উত্পন্ন:

<form action="/Upload/Upload" enctype="multipart/form-data" method="post">    
    <fieldset>
        Select a file <input type="file" name="file" />
        <input type="submit" value="Upload" />
    </fieldset>
</form>

অন্যদিকে আপনি এই ধরনের একটি হিসাবে অন্যান্য সার্ভার প্রান্তের কনস্ট্রাক্ট প্রেক্ষাপটে ভিতরে এই কোড লেখা হয় যদি ifবা foreachআপনি সরাতে উচিত @আগে using। উদাহরণ স্বরূপ:

@if (SomeCondition)
{
    using (Html.BeginForm("Upload", "Upload", FormMethod.Post, 
                                      new { enctype = "multipart/form-data" }))
    {
        @Html.ValidationSummary(true)
        <fieldset>
            Select a file <input type="file" name="file" />
            <input type="submit" value="Upload" />
        </fieldset>
    }
}

যতক্ষণ না আপনার সার্ভারের সাইড কোড সম্পর্কিত, এখানে কীভাবে এগিয়ে যাওয়া যায় তা এখানে :

[HttpPost]
public ActionResult Upload(HttpPostedFileBase file) 
{
    if (file != null && file.ContentLength > 0) 
    {
        var fileName = Path.GetFileName(file.FileName);
        var path = Path.Combine(Server.MapPath("~/content/pics"), fileName);
        file.SaveAs(path);
    }
    return RedirectToAction("Upload");
}

1
ধন্যবাদ। আমার প্রশ্নে আপডেট হওয়া নিয়ামকটি দেখুন। এটি রেজার কোড নিয়ে কাজ করে না ..
kk-dev11

2
@ user1076915, এর অর্থ কী না ? আপনি একটি সামান্য আরো সুনির্দিষ্ট হতে পারে. আপনার নিয়ামক ক্রিয়াকলাপটি কেমন দেখতে পারে তার নমুনা কোড সহ আমি আমার উত্তর আপডেট করেছি। আপনি যদি কন্ট্রোলার অ্যাকশনে আপলোড করা ফাইলটি পেতে অক্ষম হন তবে এর অর্থ এই হতে পারে যে আপনি নেস্টড <form>ট্যাগ করেছেন (যা এইচটিএমএলে অনুমোদিত নয়) বা আপনি এমন কিছু জাভাস্ক্রিপ্ট ব্যবহার করছেন যা সাধারণ ফর্ম জমা দেওয়ার ক্ষেত্রে হাইজ্যাক করে এবং একটি অ্যাজেএক্স অনুরোধ করে যা " টি ফাইল আপলোড নিয়ে কাজ করে।
দারিন দিমিত্রভ 13

আমি আপনার কন্ট্রোলার অ্যাকশন এবং রেজারটি '@ ব্যবহার' ব্যবহার করেছি .. তবে এটি প্রদর্শন করে -> বর্ণনা: HTTP 404. আপনি যে সংস্থানটি সন্ধান করছেন (বা এর অন্যতম নির্ভরতা) সরিয়ে ফেলা যেত, তার নাম পরিবর্তন করা যেতে পারে, বা হয় কিছুক্ষণের জন্য অপ্রাপ্য. দয়া করে নীচের ইউআরএলটি পর্যালোচনা করুন এবং তা বানানটি সঠিকভাবে রয়েছে তা নিশ্চিত করুন।
kk-dev11

@ ব্যবহারকারী 1076915, আপনি কখন এই ত্রুটি বার্তা পাবেন? আপনি কখন আপলোড ফর্মটি রেন্ডার করতে চান বা কখন আপনি ফর্মটি জমা দিন? প্রথম ক্ষেত্রে নিশ্চিত করুন যে আপনি আছে GETআপলোড ক্রিয়া ভোগ করতে হবে Upload.cshtmlএই কোড ধারণকারী মতবাদ: public ActionResult Upload() { return View(); }। সুতরাং নিশ্চিত হয়ে নিন যে আপনার কাছে UploadControllerদু'টি আপলোড ক্রিয়াকলাপযুক্ত একটি কন্ট্রোলার রয়েছে : একটি ফর্মটি পরিবেশন করার জন্য এবং অন্যটি জমা দেওয়ার প্রক্রিয়া করার জন্য।
দারিন দিমিত্রভ 13

2
কাজ করে তবে একটি পোস্টের প্রসঙ্গে আমি যুক্ত করার পরামর্শ দিই: @ এইচটিএমএল.আন্টিফোরজিটোকেন ();
ফ্রেডেরিক দে লোন মিরুজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.