c# - হরন - কোন কোন ট্যাগের এলিমেন্ট থাকে না




সম্পাদক জন্য() এবং এইচটিএমএল বৈশিষ্ট্য (14)

Asp.Net এমভিসি 2.0 পূর্বরূপ নির্মাণ সাহায্যকারীদের প্রদান করে

Html.EditorFor(c => c.propertyname)

সম্পত্তি নাম স্ট্রিং হয়, উপরের কোড একটি texbox রেন্ডার।

আমি কি টেক্সট লক্স বা আমার নিজস্ব CSS শ্রেণী সম্পত্তিতে সর্বোচ্চ দৈর্ঘ্য এবং আকারের বৈশিষ্ট্যগুলিতে পাস করতে চাই?

আমার অ্যাপ্লিকেশনে প্রতিটি আকার এবং দৈর্ঘ্যের সমন্বয়গুলির জন্য আমাকে কি এক টেমপ্লেট তৈরি করতে হবে? যদি তাই হয়, যে ব্যবহারযোগ্য ডিফল্ট টেম্পলেট তৈরি করে না।


@ এইচটিএমএল.এডিটরফোরের জন্য এইচটিএমএল বৈশিষ্ট্যাবলী নির্ধারণে এই বা অন্য কোনো থ্রেডের কোনও উত্তর আমার কাছে অনেক সাহায্য ছিল না। যাইহোক, আমি একটি মহান উত্তর খুঁজে পেয়েছিলাম

একটি @ Html.EditorFor সহায়ক স্টাইলিং

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

<style type="text/css">
#dob
{
   width:6em;
}
</style>

@using (Html.BeginForm())
{
   Enter date: 
   @Html.EditorFor(m => m.DateOfBirth, null, "dob", null)
}

তথ্য এনটাইটেশন এবং তারিখ ফর্ম্যাটিং সঙ্গে মডেল সম্পত্তি "dd MMM yyyy"

[Required(ErrorMessage= "Date of birth is required")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd MMM yyyy}")]
public DateTime DateOfBirth { get; set; }

অতিরিক্ত কোডের সম্পূর্ণ লেখা ছাড়া একটি কবজের মতো কাজ করা হয়েছে। এই উত্তরটি ASP.NET MVC 3 Razor C # ব্যবহার করে।


MVC3 এ, আপনি নিম্নরূপ প্রস্থ সেট করতে পারেন:

@Html.TextBoxFor(c => c.PropertyName, new { style = "width: 500px;" })

আপনি আপনার বৈশিষ্ট্য জন্য গুণাবলী সংজ্ঞায়িত করতে পারেন।

[StringLength(100)]
public string Body { get; set; }

এটি System.ComponentModel.DataAnnotations নামে পরিচিত। আপনি যদি আপনার প্রয়োজনীয়তা ValidationAttribute খুঁজে না পান তবে আপনি সর্বদা কাস্টম বৈশিষ্ট্যগুলি সংজ্ঞায়িত করতে পারেন।

শ্রেষ্ঠ শুভেচ্ছা, কার্লোস


আপনি রাউন্ড পেতে পারেন এক উপায় এটি মত বিশেষ রেন্ডারিং প্রিন্ট আউট হ্যান্ডেল হ্যান্ডেল মডেল দেখতে প্রতিনিধিদের দ্বারা হয়। আমি একটি পেজিং ক্লাসের জন্য এটি করেছি, আমি Func<int, string> RenderUrl মডেলের সাথে জনসাধারণের সম্পত্তি Func<int, string> RenderUrl জন্য এটি মোকাবেলা করি।

তাই কাস্টম বিট কিভাবে লেখা হবে তা সংজ্ঞায়িত করুন:

Model.Paging.RenderUrl = (page) => { return string.Concat(@"/foo/", page); };

আউটপুট Paging ক্লাসের জন্য দেখুন:

@Html.DisplayFor(m => m.Paging)

... এবং প্রকৃত Paging দৃশ্যের জন্য:

@model Paging
@if (Model.Pages > 1)
{
    <ul class="paging">
    @for (int page = 1; page <= Model.Pages; page++)
    {
        <li><a href="@Model.RenderUrl(page)">@page</a></li>
    }
    </ul>
}

এটি অত্যন্ত জটিল বিষয় হিসাবে দেখা যেতে পারে তবে আমি সর্বত্র এই পৃষ্ঠাগুলি ব্যবহার করি এবং তাদের সরবরাহ করার জন্য একই বয়লারপ্লেট কোডটি দেখতে পারিনি।


আমি কিরণ চাঁদের ব্লগ পোস্টে দেখতে চাই , তিনি ভিউ মডেলে কাস্টম মেটাডেটা ব্যবহার করেন যেমন:

[HtmlProperties(Size = 5, MaxLength = 10)]
public string Title { get; set; }

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


আমি অবাক হয়ে বললাম, "অতিরিক্ত ভিউডাতায়" এটিকে পাশ করে এবং অন্য দিকে এটি পড়ে।

দেখুন (স্বচ্ছতার জন্য লাইন বিরতি দিয়ে):

<%= Html.EditorFor(c => c.propertyname, new
    {
        htmlAttributes = new
        {
            @class = "myClass"
        }
    }
)%>

সম্পাদক টেমপ্লেট:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %>

<%= Html.TextBox("", Model, ViewData["htmlAttributes"])) %>


আমি এটা সমাধান!
রেজারের জন্য সিনট্যাক্সটি হল:
@Html.TextAreaFor(m=>m.Address, new { style="Width:174px" }) এটি স্টাইল প্যারামিটারে নির্ধারিত প্রস্থে পাঠ্য এলাকা প্রস্থকে সামঞ্জস্য করে।
এএসপিএক্স সিনট্যাক্স জন্য:
<%=Html.TextAreaFor(m => m.Description, new { cols = "20", rows = "15", style="Width:174px" })%>
এই কৌতুক করতে হবে


আমি জানি না কেন এটি Html.EditorFor এর জন্য কাজ করে না তবে আমি টেক্সটবক্সফোর চেষ্টা করেছি এবং এটি আমার জন্য কাজ করেছে।

@Html.TextBoxFor(m => m.Name, new { Class = "className", Size = "40"})

... এবং বৈধতা কাজ করে।


আমি মনে করি সিএসএস ব্যবহার করার উপায়। আমি আশা করি আমি এক্সএএমএল-তে মত .নেট কোডিংয়ের সাথে আরও কিছু করতে পারব, কিন্তু ব্রাউজারে সিএসএস রাজা।

Site.css

#account-note-input { 
  width:1000px; 
  height:100px; 
} 

.cshtml

<div class="editor-label"> 
  @Html.LabelFor(model => model.Note) 
</div> 
<div class="editor-field"> 
  @Html.EditorFor(model => model.Note, null, "account-note-input", null) 
  @Html.ValidationMessageFor(model => model.Note) 
</div>

জো


এখানে সমাধান পেতে এটি সবচেয়ে পরিষ্কার এবং সবচেয়ে মার্জিত / সহজ উপায়।

উজ্জ্বল ব্লগ পোস্ট এবং পাগল অধ্যাপক মত কাস্টম এক্সটেনশান / সহায়ক পদ্ধতিতে কোন নোংরা overkill।

http://geekswithblogs.net/michelotti/archive/2010/02/05/mvc-2-editor-template-with-datetime.aspx


এটি slickest সমাধান হতে পারে না, কিন্তু এটি সহজবোধ্য। আপনি HtmlHelper.EditorFor ক্লাসে একটি এক্সটেনশন লিখতে পারেন। যে এক্সটেনশনটিতে, আপনি একটি বিকল্প প্যারামিটার সরবরাহ করতে পারেন যা সহায়তার জন্য ভিউডাতে বিকল্পগুলি লিখবে। এখানে কিছু কোড আছে:

প্রথম, এক্সটেনশান পদ্ধতি:

public static MvcHtmlString EditorFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, TemplateOptions options)
{
    return helper.EditorFor(expression, options.TemplateName, new
    {
        cssClass = options.CssClass
    });
}

পরবর্তী, অপশন বস্তু:

public class TemplateOptions
{
    public string TemplateName { get; set; }
    public string CssClass { get; set; }
    // other properties for info you'd like to pass to your templates,
    // and by using an options object, you avoid method overload bloat.
}

এবং অবশেষে, এখানে String.ascx টেমপ্লেট থেকে লাইনটি রয়েছে:

<%= Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = ViewData["cssClass"] ?? "" }) %>

সত্যি বলতে কি, আমার মনে হয় এই গরীব আত্মার কাছে এটি সরল এবং স্পষ্ট, যিনি আপনার কোডটি রাস্তার নিচে বজায় রাখতে হবে। এবং এটি আপনার টেম্পলেটগুলিতে পাস করতে চান এমন তথ্যগুলির অন্যান্য বিটগুলির জন্য প্রসারিত করা সহজ। এটি এমন একটি প্রকল্পে আমার জন্য এতদূর কাজ করছে যেখানে আমি টেমপ্লেটের একটি সেটে যতটা সম্ভব মোড়ানো চেষ্টা করতে পারি, যাতে পার্শ্ববর্তী এইচটিএমএলকে মানিয়ে নিতে সাহায্য করা যায়, একটি ল http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-5-master-page-templates.html


কারণ প্রশ্নটি সম্পাদনার জন্য নয়, টেক্সটবক্সের জন্য WEFX এর পরামর্শ কাজ করে না।

পৃথক ইনপুট বাক্স পরিবর্তন করার জন্য, আপনি সম্পাদকফোর পদ্ধতির আউটপুট প্রক্রিয়া করতে পারেন:

<%: new HtmlString(Html.EditorFor(m=>m.propertyname).ToString().Replace("class=\"text-box single-line\"", "class=\"text-box single-line my500pxWideClass\"")) %>

এটি আপনার সমস্ত সম্পাদককে পরিবর্তন করাও সম্ভব কারণ এমভিসিটি .text-box সহ সম্পাদকফোর পাঠ্য বাক্সগুলির ক্লাস সেট করে, তাই আপনি কেবল স্টাইলশীট বা পৃষ্ঠায় এই শৈলীটি ওভাররাইড করতে পারেন।

.text-box {
    width: 80em;
}

উপরন্তু, আপনি জন্য শৈলী সেট করতে পারে

input[type="text"] {
    width: 200px;
}
  • এই overrides। টেক্সট বক্স এবং সব ইনপুট টেক্সট বক্স, সম্পাদক জন্য বা অন্যথায় পরিবর্তন করা হবে।

সমস্যা হল, আপনার টেমপ্লেটটিতে বেশ কিছু HTML উপাদান থাকতে পারে, তাই আপনার মাপের আকার / ক্লাসটি কোনটি প্রয়োগ করতে পারে তা MVC জানবে না। আপনি এটি নিজেকে সংজ্ঞায়িত করতে হবে।

আপনার টেমপ্লেটটি আপনার নিজের ক্লাস থেকে তৈরি করুন TextBoxViewModel নামে পরিচিত:

public class TextBoxViewModel
{
  public string Value { get; set; }
  IDictionary<string, object> moreAttributes;
  public TextBoxViewModel(string value, IDictionary<string, object> moreAttributes)
  {
    // set class properties here
  }
  public string GetAttributesString()
  {
     return string.Join(" ", moreAttributes.Select(x => x.Key + "='" + x.Value + "'").ToArray()); // don't forget to encode
  }

}

টেমপ্লেটের মধ্যে আপনি এটি করতে পারেন:

<input value="<%= Model.Value %>" <%= Model.GetAttributesString() %> />

আপনার মতামত আপনি কি:

<%= Html.EditorFor(x => x.StringValue) %>
or
<%= Html.EditorFor(x => new TextBoxViewModel(x.StringValue, new IDictionary<string, object> { {'class', 'myclass'}, {'size', 15}}) %>

প্রথম ফর্ম স্ট্রিং জন্য ডিফল্ট টেমপ্লেট রেন্ডার হবে। দ্বিতীয় ফর্ম কাস্টম টেমপ্লেট রেন্ডার হবে।

বিকল্প সিনট্যাক্স সদৃশ ইন্টারফেস ব্যবহার করুন:

public class TextBoxViewModel
{
  public string Value { get; set; }
  IDictionary<string, object> moreAttributes;
  public TextBoxViewModel(string value, IDictionary<string, object> moreAttributes)
  {
    // set class properties here
    moreAttributes = new Dictionary<string, object>();
  }

  public TextBoxViewModel Attr(string name, object value)
  {
     moreAttributes[name] = value;
     return this;
  }

}

   // and in the view
   <%= Html.EditorFor(x => new TextBoxViewModel(x.StringValue).Attr("class", "myclass").Attr("size", 15) %>

লক্ষ্য করুন যে এই দৃশ্যটি করার পরিবর্তে, আপনি এটি নিয়ামকটিতেও করতে পারেন, অথবা ভিউডমেলের মধ্যে আরও ভালোভাবে করতে পারেন:

public ActionResult Action()
{
  // now you can Html.EditorFor(x => x.StringValue) and it will pick attributes
  return View(new { StringValue = new TextBoxViewModel(x.StringValue).Attr("class", "myclass").Attr("size", 15) });
}

এছাড়াও লক্ষ্য করুন যে আপনি বেস টেমপ্লেটমোডেল ক্লাস তৈরি করতে পারেন - আপনার সমস্ত দর্শন টেমপ্লেটগুলির জন্য একটি সাধারণ স্থল - যা গুণাবলী / ইত্যাদির জন্য মৌলিক সহায়তা ধারণ করবে।

কিন্তু সাধারণভাবে আমি মনে করি এমভিসি v2 একটি ভাল সমাধান প্রয়োজন। এটি এখনও বিটা - এটির জন্য জিজ্ঞাসা করুন ;-)





asp.net-mvc-2