دیکھیں کہ اے ایس پی-جواز دہی کا خلاصہ کیسے کام کرتا ہے

جب صفحے کی تازہ کاری :
صفحہ تخلیق تاریخ :

ماحول

بصری سٹوڈیو
  • بصری سٹوڈیو 2019
ASP.NET کور
  • 3.0
  • 3.1

پہلے

ASP.NET بنیادی طور پر سکرین پر ان پٹ کی توثیق کی غلطیوں کو ظاہر کرنے کا ایک طریقہ کے طور پر ASP-توثیق-خلاصہ استعمال کرنے کا ایک طریقہ ہے. میں واقعی میں وضاحت کر سکتا ہے کہ پیرامیٹرز کے درمیان فرق کو سمجھنے نہیں تھا ، تو میں نے اسے چیک کیا.

تین ممکنہ اقدار ہیں:

  • کوئی
  • موڈیلونل
  • تمام

اس کی جانچ پڑتال کے نتیجے میں کہ ان میں سے ہر ایک فرق کس طرح کام کرتا ہے ، نتیجہ مندرجہ ذیل ہے:

پری تیاری

اس وقت ، ہم آپریشن کے لئے تیار کریں گے. ان میں سے زیادہ تر بے شمار ہیں ، لہذا اگر آپ صرف نتائج دیکھنا چاہتے ہیں تو ، مضمون کے دوسرے نصف کو دیکھیں.

اس کی توثیق آپ کو فارم میں صارف رجسٹر کرنا چاہتے ہیں کہ فرض, تو ہم صارف کے لئے ایک نقطہ نظر ماڈل بنائیں گے. میں مختلف اشیاء رکھتا ہوں ، لیکن مواد کچھ بھی نہیں ہے کیونکہ اس بات کی تصدیق کرنے کے لئے ممکن ہے کہ کم ازکم ایک ہے. ہم داٹاننوٹیٹااون کے ساتھ چیک کریں گے ، لہذا ہم مطلوبہ اور StringLength صفات مقرر کریں گے. رویے میں فرق دیکھنے کے لئے ، میں صرف ایک اضافی IsAccepted قبول میں ڈال دیا.

* * ماڈلز/اسرویومودال * *

using System;
using System.ComponentModel.DataAnnotations;

namespace ValidationSummaryTest.Models
{
  public class UserViewModel
  {
    [Required]
    [StringLength(20)]
    public string ID { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }

    // 省略

    [Required]
    public bool IsAccepted { get; set; }
  }
}

Asp-توثیق خلاصہ کے تین اقدار کی جانچ پڑتال کے لیے ، ہر عمل تخلیق کریں ۔ تاہم ، چونکہ asp-توثیق-خلاصہ ایک نقطہ نظر کی کہانی ہے ، ہر کارروائی کے مواد تمام پیغامات کے علاوہ ایک ہی کوڈ ہیں.

اگر IsAccepted قبول نہیں کیا گیا تو ، ہم ایک غلطی کو شامل کر رہے ہیں ۔ نمونہ اور خالی کلید کے مقابلے میں ایک مختلف کلید کے ساتھ نقص میں نقص شامل کیا گیا ہے ۔

اگر کوئی غلطی نہیں ہے تو ، ایک کامیاب رجسٹریشن پیغام دکھائیں.

HomeController.cs

public IActionResult ValidateNone() => View();

[HttpPost]
public IActionResult ValidateNone(UserViewModel model)
{
  if (model.IsAccepted == false)
  {
    ModelState.AddModelError("PropertyName1", "プロパティに依存するエラー (None)");
    ModelState.AddModelError("", "空のキーエラー (None)");
  }
  if (ModelState.IsValid == false) return View(model);
  ViewData["Message"] = "正常に登録しました。";
  return View(model);
}

public IActionResult ValidateModelOnly() => View();

[HttpPost]
public IActionResult ValidateModelOnly(UserViewModel model)
{
  if (model.IsAccepted == false)
  {
    ModelState.AddModelError("PropertyName1", "プロパティに依存するエラー (ModelOnly)");
    ModelState.AddModelError("", "空のキーエラー (ModelOnly)");
  }
  if (ModelState.IsValid == false) return View(model);
  ViewData["Message"] = "正常に登録しました。";
  return View(model);
}

public IActionResult ValidateAll() => View();

[HttpPost]
public IActionResult ValidateAll(UserViewModel model)
{
  if (model.IsAccepted == false)
  {
    ModelState.AddModelError("PropertyName1", "プロパティに依存するエラー (All)");
    ModelState.AddModelError("", "空のキーエラー (All)");
  }
  if (ModelState.IsValid == false) return View(model);
  ViewData["Message"] = "正常に登録しました。";
  return View(model);
}

Index. cshtml اس صفحے پر ایک لنک کا اضافہ کرتا ہے جہاں ہر ٹیسٹ کیا جاتا ہے.

index. cshtml

@{
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
  <h1 class="display-4">Welcome</h1>
  <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

<ul>
  <li><a asp-action="ValidateNone">ValidateNone</a></li>
  <li><a asp-action="ValidateModelOnly">ValidateModelOnly</a></li>
  <li><a asp-action="ValidateAll">ValidateAll</a></li>
</ul>

یہ تصدیق کے لیے صارف رجسٹریشن صفحہ ہے ۔ اگر کوئی غلطی ہے تو ، اس کے مواد کو ظاہر کرنے کے لئے ایک پیرامیٹر کے طور پر asp کی توثیق-خلاصہ کے لئے کوئی بھی وضاحت کریں. ہم نے بھی "غلطی براہ راست اندراج" کی سزا کو div ٹیگ میں یہ دیکھنے کے لئے کہ ڈیفالٹ غلطی کا پیغام دکھایا گیا ہے.

دوسرے کوڈ کو تفصیل سے بحث نہیں کی جاتی ہے کیونکہ یہ کوڈ ہے جو خود بخود ماڈل کی بنیاد پر سہاروں کی طرف سے پیدا کیا گیا تھا. (ان میں سے کچھ ہاتھ سے مقرر کیا گیا ہے ، لیکن اس کی تصدیق کے ساتھ کوئی تعلق نہیں ہے.)

ہر ان پٹ قطعہ (ان پٹ ٹیگ) کے قریب خواص سیٹ کے لیے asp-توثیق کے ساتھ ایک دورانیہ ٹیگ ہے ۔ یہ ہر ان پٹ فیلڈ کے لئے غلطی کے پیغامات کو ظاہر کرنے کے لئے ایک ٹیگ (خصوصیت) ہے. Asp-توثیق خلاصہ میں اختصاصی پیرامیٹر سے قطع نظر ، ایک نقص پیغام ہمیشہ اس محل وقوع پر ظاہر ہوتا ہے اگر کوئی نقص ہو ۔

اس کے علاوہ ، asp کی توثیق-خلاصہ سرور کی توثیق کے نتائج دکھاتا ہے ، لہذا کلائنٹ کی توثیق کے عمل (_ValidationScriptsPartial) تبصرے باہر.

والاداٹینونی سی ایم ایل

@model ValidationSummaryTest.Models.UserViewModel

@{
  ViewData["Title"] = "ValidateNone";
}

<h1>ValidateNone</h1>

<h4>UserViewModel</h4>
<hr />
<div class="row">
  <div class="col-md-4">
    <form asp-action="ValidateNone">
    
      <div asp-validation-summary="None" class="text-danger">エラー直接入力</div>
      
      <div class="form-group">
        <label asp-for="ID" class="control-label"></label>
        <input asp-for="ID" class="form-control" />
        <span asp-validation-for="ID" class="text-danger"></span>
      </div>
      <div class="form-group">
        <label asp-for="Name" class="control-label"></label>
        <input asp-for="Name" class="form-control" />
        <span asp-validation-for="Name" class="text-danger"></span>
      </div>
      
      @* 省略 *@
      
      <div class="form-group form-check">
        <label class="form-check-label">
          <input class="form-check-input" asp-for="IsAccepted" /> @Html.DisplayNameFor(model => model.IsAccepted)
        </label>
      </div>
      <div class="form-group">
        <input type="submit" value="Create" class="btn btn-primary" />
      </div>
    </form>
  </div>
</div>

<div>
  <a asp-action="Index">Back to List</a>
</div>

@* サーバーのエラーを表示したいのでコメントアウト *@
@*@section Scripts {
  @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}*@

والاداٹیموڈیلونل. cshtml صفحات آپ کو asp کی توثیق کے خلاصے کے لئے موڈیلونل کی وضاحت نہیں جب تک کہ. ڈسپلے متن والاداٹینونی. cshtml پیکنگ کے طور پر ایک ہی ہے.

والاداٹیموڈیلونل سی ایم ایل

@model ValidationSummaryTest.Models.UserViewModel

@{
  ViewData["Title"] = "ValidateModelOnly";
}

<h1>ValidateModelOnly</h1>

<h4>UserViewModel</h4>
<hr />
<div class="row">
  <div class="col-md-4">
    <form asp-action="ValidateModelOnly">
      <div asp-validation-summary="ModelOnly" class="text-danger">エラー直接入力</div>
      
      @* 省略 *@

    </form>
  </div>
</div>

@* 省略 *@

والاداٹیالل. cshtml صفحات asp-توثیق-خلاصہ کے لئے تمام وضاحت کے علاوہ تقریبا ایک جیسی ہیں.

والاداٹیالل سی ایم ایل

@model ValidationSummaryTest.Models.UserViewModel

@{
  ViewData["Title"] = "ValidateAll";
}

<h1>ValidateAll</h1>

<h4>UserViewModel</h4>
<hr />
<div class="row">
  <div class="col-md-4">
    <form asp-action="ValidateAll">
      <div asp-validation-summary="All" class="text-danger">エラー直接入力</div>
    </form>

    @* 省略 *@
  </div>
</div>

@* 省略 *@

چیک کریں آپریشن

کوئی

پروگرام بنانے کے بعد ، عملیہ کی پڑتال کرنے کی کوشش کریں ۔ asp-توثیق-خلاصہ =کوئی بھی سکرین.

چونکہ "ابتدائی ڈسپلے حالت میں" براہ راست ان پٹ "ظاہر کیا جاتا ہے ، یہ ایک ڈیفالٹ غلطی پیغام کے طور پر استعمال کرنے کے قابل نہیں لگتا ہے. ایسے پیرامیٹرز موجود ہیں جو ضرورت سے مقرر کیے گئے ہیں ، لہذا ہمیں اپ ڈیٹ کے عمل کو انجام دینے کے لئے جاری رکھیں.

کسی کے نام کے طور پر ، کچھ بھی نہیں دکھایا جاتا ہے اگر ایک غلطی ہے. طے شدہ نقص کا پیغام برقرار رہتا ہے ، لہذا اس کا کوئی براہ راست سیٹ کرنے اور اسے استعمال کرنے کا امکان نہیں ہے ۔ اگر آپ کو اس کا استعمال کرنے کا موقع ہے تو ، کیا آپ کو asp کی توثیق کے خلاصے کو متحرک طور پر مقرر کرنا چاہتے ہیں اور اگر آپ کوئی غلطی نہیں دیکھنا چاہتے ہیں ؟

موڈیلونل

Asp-توثیق-خلاصہ = موڈیلونل کے ساتھ سکرین. مجھے لگتا ہے کہ بہت سے استعمال کے مناظر ہیں کیونکہ یہ تصدیقی غلطی اور سہاروں کے نمونے میں باہر آتا ہے.

کے متن کے بعد "میں براہ راست ان پٹ" کہ div ٹیگ میں رکھا گیا تھا نہیں دکھایا گیا ہے, ایسا لگتا ہے کہ کوئی مسئلہ نہیں ہے یہاں تک کہ اگر آپ اسے ڈال.

یہ ایک ریاست ہے جس میں رجسٹریشن کے عمل کو انجام دیا جاتا ہے اور غلطی ظاہر کی جاتی ہے. یہاں ظاہر ہونے والے پیغامات وہ طے شدہ پیغامات ہیں جو پہلے ہی div ٹیگ میں رکھا گیا تھا اور پیش کار کے پیغامات میں نقص پیغام. نوٹ ، تاہم ، اگر آپ کے پاس سرور کی طرف ایک خالی کلیدی پیغام نہیں ہے تو ، div ٹیگ میں پیغام ظاہر نہیں ہوگا.

سرور کی طرف ، دو خرابی کے پیغامات ڈال دیا جاتا ہے ، لیکن کلید میں خالی حروف کے ساتھ صرف غلطی ظاہر کی جاتی ہے. اگر آپ ایک اہم وضاحت کرتے ہیں تو ، یہ اس نام کے ساتھ ماڈل کی جائیداد میں ایک غلطی کے طور پر علاج کیا جائے گا ، لہذا یہ asp کی توثیق کے خلاصہ میں ظاہر نہیں ہوتا. اس کے بجائے ، اسی نام کے وصف کے لئے asp-توثیق کے ساتھ کسی بھی ٹیگ پر ایک پیغام ظاہر ہوتا ہے.

تمام

Asp-کی توثیق-خلاصہ =تمام اسکرین پر بیان کیا جاتا ہے.

کسی وجہ کے لئے ، ایمبیڈڈ "غلطی براہ راست ان پٹ" کا متن دکھایا گیا ہے. مجھے یقین نہیں ہے کہ میں اکیلے موڈیلونل نہیں دیکھ رہا ہوں. ایسا لگتا ہے کہ سرایت کرنے وقت کے لئے تمام میں استعمال نہیں کیا جا سکتا.

یہ ایک اسکرین ہے جس کے بعد اپ ڈیٹ کے عمل کو انجام دیا جاتا ہے. تمام ان پٹ قطعات (خواص) کے لیے نقص پیغامات فہرست میں دکھائے جاتے ہیں ۔ ہر ان پٹ فیلڈ بھی ایک غلطی کا پیغام دکھاتا ہے ، لہذا اگر آپ غلطی کو خلاصہ کرنے کے لئے تمام وضاحت کرنا چاہتے ہیں ، تو ہر ان پٹ فیلڈ کے لئے asp-توثیق-خصوصیات کو دور کرنے کے لئے بہتر ہوگا.

سرور سائڈ پر شامل خرابی کے پیغامات بھی دکھائے جاتے ہیں. آپ یہ بھی دیکھ سکتے ہیں کہ آپ کلیدی کے ساتھ ایک غلطی بھی دیکھ رہے ہیں.

خلاصہ

Asp-توثیق-خلاصہ تین پیرامیٹرز تھے. آپ موڈیلونل استعمال کرنا چاہتے ہیں کہ یہ سمجھنے میں آسان بنانے کے لئے کہ غلطی کہاں ہے ، یا تخلپی کو ختم کرنے کے لئے. نوٹ کریں کہ asp-توثیق-خلاصہ میں ظاہر واحد پیغام خالی کلید کے ساتھ ایک پیغام ہے.

ویسے ، آپ کو ایک خالی چابی کرنا چاہتے ہیں کے طور پر آپ کو بہت سے پیغامات شامل کر سکتے ہیں ، لہذا آپ کو ایک سے زیادہ پیغامات کو ظاہر کرنے کے لئے تار کو یکجا کرنے کی ضرورت نہیں ہے.

سب کے لئے ، اگر آپ ایک ہی جگہ میں غلطی کے پیغامات جمع کرنا چاہتے ہیں ، تو کوئی بھی نہیں ، جب آپ کسی وجہ سے کوئی غلطی کا پیغام ظاہر نہیں کرنا چاہتے ہیں تو متحرک طور پر مقرر کریں. اس کے مقصد کے لئے اس کا استعمال کرنا اچھا ہے.