دعم متعدد اللغات ل DataAnnotations المستخدمة لأسماء المعلمات ورسائل التحقق من صحة الإدخال، إلخ.
وسط
- ASP.NET كور
-
- 5.0 MVC
فرضيه
تتم كتابة هذه النصائح كفهم للنصائح التالية:
أيضا، إذا كنت تقوم بإنشاء مشروع جديد، يجب أن يكون لديك إضافة الملفات والتعليمات البرمجية التالية استنادا إلى تلميحات أعلاه.
- إنشاء ملف SharedResource.resx (+en, es). (قد تكون المحتويات فارغة.)
- إنشاء ملف مشتركالمصدر.cs
- إضافة رمز التعريب إلى Startup.ConfigureServices
- إضافة رمز التعريب إلى بدء التشغيل.تكوين
إصلاحات .cs بدء التشغيل
لأن إعدادات متعددة اللغات إضافية تتعلق DataAnnotations مطلوبة، Startup.ConfigureServices
تعديل الأسلوب كما يلي:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddMvc()
// ローカライズに必要。Resx ファイルのフォルダパスを指定
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix, opts => { opts.ResourcesPath = "Resources"; })
// DataAnnotations のローカライズに必要 (追加)
.AddDataAnnotationsLocalization(options =>
{
// DataAnnotation を使ったときのメッセージは SharedResource に集約する
options.DataAnnotationLocalizerProvider = (type, factory) => factory.Create(typeof(SharedResource));
});
}
نمذجة الإدخال
إنشاء نموذج لربط إلى شاشة الإدخال. في هذه العينة، أنشأنا عددا من الخصائص لاستيعاب عناصر تحكم الإدخال المختلفة. إذا كنت تواجه مشكلة في الإنشاء ، فيمكنك إنشاء اثنين فقط.
إنشاء .cs UserViewModel في المجلد طرازات.
يجب أن تبدو التعليمات البرمجية كما يلي: يجب أن تكون مساحة الاسم مناسبة. السمات التي قمت بتعيينها غير ذات صلة لغات متعددة لأنه يتم تعيينها فقط لهم. وسيتم تقديم الدعم المتعدد اللغات في وقت لاحق.
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace LocalizationDataAnnotation.Models
{
public class UserViewModel
{
[Required]
[Display(Name = "ID (半角英数字)")]
[StringLength(20)]
[RegularExpression(@"^[0-9a-zA-Z]*$")]
public string ID { get; set; }
[StringLength(50)]
public string Name { get; set; }
[StringLength(50, MinimumLength = 8)]
[DataType(DataType.Password)]
[RegularExpression(@"^[0-9a-zA-Z]*$", ErrorMessage = "Password")]
public string Password { get; set; }
// 省略
}
// 省略
}
إنشاء إجراء
إنشاء إجراءات لعرض شاشة تسجيل المستخدم وتنفيذ HomeController
إجراءات التسجيل.
إنشاء شاشات والإجراءات ليست الموضوع الرئيسي لهذه النصائح، لذلك فمن المناسب. بالإضافة إلى ذلك، لا يتم تنفيذ عملية التسجيل الفعلية.
// 初期コードは省略
namespace LocalizationDataAnnotation.Controllers
{
public class HomeController : Controller
{
// 初期コードは省略
public IActionResult Create()
{
return View();
}
[HttpPost]
public IActionResult Create(UserViewModel model)
{
// エラーなら差し戻し
if (ModelState.IsValid == false) return View(model);
// 正常に登録できた場合は Index に戻る
return RedirectToAction(nameof(Index));
}
}
}
الارتباط بشاشة تسجيل المستخدم
إنشاء ارتباط إلى شاشة تسجيل المستخدم في طرق العرض\الصفحة الرئيسية\Index.cshtml. يمكنك كتابة أي شيء طالما يمكنك الحصول على انتقال الشاشة.
asp-route-culture
السمة فتح الصفحة في اللغة المحددة.
<!-- 初期コード省略 -->
<ul>
<li><a asp-action="Create">Create</a></li>
<li><a asp-action="Create" asp-route-culture="ja">Create (ja)</a></li>
<li><a asp-action="Create" asp-route-culture="en">Create (en)</a></li>
<li><a asp-action="Create" asp-route-culture="es">Create (es)</a></li>
</ul>
إنشاء شاشة تسجيل مستخدم
Create
انقر بزر الماوس الأيمن فوق الإجراء وحدد إضافة طريقة عرض.
حدد طريقة عرض Razor.
جعل القالب "إنشاء" وفئة الطراز "UserViewModel".
إذا كنت تستخدم UserViewModel
نموذج التعليمات البرمجية ، لقد أدرجت أيضا تعليقات في التعليمات البرمجية.
إذا وضعت سمات معينة في خاصية، سوف تحصل على خطأ عند إنشاء التعليمات البرمجية في scaffolding.
الرجاء التعليق بشكل مؤقت قبل إنشاء طريقة عرض.
إذا كنت حقا الحصول على خطأ عند إنشائه، إنشاء طريقة عرض Razor فارغة وتضمين التعليمات البرمجية التالية:
@model LocalizationDataAnnotation.Models.UserViewModel
@using System.Globalization;
@{
ViewData["Title"] = "Create";
}
<h1>Create</h1>
<h4>UserViewModel</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" 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">
<label asp-for="Password" class="control-label"></label>
<input asp-for="Password" class="form-control" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
<!-- 省略 -->
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" asp-route-culture="@CultureInfo.CurrentCulture.Name" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Back to List</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
في الوقت الحالي، كمرحلة تحضيرية، يمكنك إنشاء التعليمات البرمجية حتى الآن بنجاح، ومحاولة رؤية الشاشة وتشغيلها بشكل صحيح.
تسجيل نص متعدد اللغات ل DataAnnotations
جميع الخصائص طويلة لشرح، لذلك سوف ID
نتحدث إلى وإلى . Name
خصائص أخرى متعددة اللغات بطريقة مماثلة، لذلك جربها.
النصوص التالية متوفرة بلغات متعددة هنا.
مفاتيح | النص متعددة اللغات |
---|---|
اسم عرض معلمة معرف | ID_DisplayName |
رسالة خطأ عند عدم إدخال معرف | Validate_Required |
رسالة خطأ عندما يتجاوز حرف إدخال معرف 20 حرفا | Validate_StringLength |
رسالة خطأ عند كتابة معرف بأحرف غير رقمية | Validate_Alphanumeric |
اسم عرض المعلمة اسم | Name_DisplayName |
رسالة خطأ عندما يكون الاسم أكثر من 50 حرفا تم إدخالها | Validate_StringLength |
Validate_XXXXX
أن تكون عالمية. لا توجد اصطلاحات تسمية رئيسية، لذا يمكنك إرفاقها بحرية.
باستخدام هذه المفاتيح كأساس، SharedResource.resx
سوف نقوم بتعبئة SharedResource.en.resx
النص المترجم إلى ، SharedResource.es.resx
.
المشتركالمصدر.resx
قيمة الاسم | |
---|---|
Validate_Required | "{0}" مطلوب. |
Validate_StringLength | يمكنك إدخال ما يصل إلى "{1}" في "{0}". |
Validate_Alphanumeric | {0} يمكن أن يكون أبجدية رقمية فقط. |
ID_DisplayName | معرف (أبجدية رقمية) |
Name_DisplayName | الهوية |
المشتركالمصدر.en.resx
قيمة الاسم | |
---|---|
Validate_Required | "{0}" هو إدخال مطلوب. |
Validate_StringLength | الحد الأقصى لعدد الأحرف التي يمكن إدخالها في "{0}" هو "{1}". |
Validate_Alphanumeric | يمكن إدخال الأحرف الأبجدية الرقمية فقط ل "{0}". |
ID_DisplayName | معرف (أحرف أبجدية رقمية) |
Name_DisplayName | الاسم الكامل |
المشتركالمصدر.es.resx
قيمة الاسم | |
---|---|
Validate_Required | "{0}" es أونا إنترادا obligatoria. |
Validate_StringLength | إل نيميرو ماكسيمو دي كاراكتيريس كيو سي بودين إنغريسار أون "{0}" إي إس "{1}". |
Validate_Alphanumeric | سولو سي بودين إنغريسار كاراكتيريس ألفانوميريكوس الفقرة "{0}". |
ID_DisplayName | هيئة الرقابة الداخلية (كاراكتريس ألفانوميريكوس) |
Name_DisplayName | نومبري أكملو |
رسائل خطأ التحقق من صحة الإدخال استبدال أسماء المعلمات والأرقام مع {0} {1}. دعونا نستخدمها بشكل إيجابي.
تطبيق متعدد اللغات على البياناتالنوات
يتم تطبيق كافة الإعدادات متعددة اللغات على سمات الطراز (DataAnnotations).
لتطبيقه على اسم العرض للمعلمة، Display
قم بإرفاق Name
مفتاح sharedResource.resx في الخاصية وتحديده.
لتطبيق رسائل الخطأ أثناء التحقق من صحة الإدخال، حدد ErrorMessage
مفتاح sharedResource.resx في خاصية كل سمة التحقق من الصحة.
public class UserViewModel
{
[Required(ErrorMessage = "Validate_Required")]
[Display(Name = "ID_DisplayName")]
[StringLength(20, ErrorMessage = "Validate_StringLength")]
[RegularExpression(@"^[0-9a-zA-Z]*$", ErrorMessage = "Validate_Alphanumeric")]
public string ID { get; set; }
[Display(Name = "Name_DisplayName")]
[StringLength(50, ErrorMessage = "Validate_StringLength")]
public string Name { get; set; }
// 省略
}
هذا يكمل الإعداد. بعد ذلك، قم بتشغيله لمعرفة كيفية عمله.
بالمناسبة، عدد أحرف الإدخال محدود بواسطة سمة maxlength
علامة الإدخال.
إذا كنت تريد مشاهدة الرسالة، فستحتاج إلى إزالة القيود، كما هو الحال في أدوات المطور في مستعرض ويب.
بالمناسبة، هناك بعض الرسائل المعروضة عند تسجيل عمرك وتاريخك، الخ فارغة. هذه هي الرسالة التي تم إعدادها على الجانب إطار العمل، ولكن آخر نصائح سوف تظهر لك كيفية دعم ذلك في لغات متعددة.
لجميع الرموز
تحتوي هذه التلميحات على بعض الخصائص فقط، ولكن يغطي نموذج التعليمات البرمجية كافة حقول الإدخال التي تم تمكين html5. إذا كنت ترغب في التحقق، يرجى الرجوع إلى الرابط أعلاه الصفحة.
المدرجة في جزء أدناه
المستخدمفيوموديل.cs
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace LocalizationDataAnnotation.Models
{
public class UserViewModel
{
[Required(ErrorMessage = "Validate_Required")]
[Display(Name = "ID_DisplayName")]
[StringLength(20, ErrorMessage = "Validate_StringLength")]
[RegularExpression(@"^[0-9a-zA-Z]*$", ErrorMessage = "Validate_Alphanumeric")]
public string ID { get; set; }
[Display(Name = "Name_DisplayName")]
[StringLength(50, ErrorMessage = "Validate_StringLength")]
public string Name { get; set; }
[Display(Name = "Password_DisplayName")]
[StringLength(50, MinimumLength = 8, ErrorMessage = "Validate_StringLengthRange")]
[DataType(DataType.Password)]
[RegularExpression(@"^[0-9a-zA-Z]*$", ErrorMessage = "Validate_Alphanumeric")]
public string Password { get; set; }
[Display(Name = "ConfirmPassword_DisplayName")]
[StringLength(50, MinimumLength = 8, ErrorMessage = "Validate_StringLengthRange")]
[DataType(DataType.Password)]
[Compare(nameof(Password), ErrorMessage = "Validate_Compare")]
public string ConfirmPassword { get; set; }
[Display(Name = "Email_DisplayName")]
[EmailAddress(ErrorMessage = "Validate_EmailAddress")]
[DataType(DataType.EmailAddress)] // スキャフォールディングするときはコメントアウトする
public string Email { get; set; }
[Display(Name = "Age_DisplayName")]
[Required(ErrorMessage = "Validate_Required")]
[Range(0, 150, ErrorMessage = "Validate_Range")]
public int Age { get; set; }
[Display(Name = "Gender_DisplayName")]
[Required(ErrorMessage = "Validate_Required")]
[EnumDataType(typeof(GenderType))]
public GenderType Gender { get; set; }
[Display(Name = "Birthday_DisplayName")]
[DataType(DataType.Date)]
public DateTime Birthday { get; set; }
[Display(Name = "Phone_DisplayName")]
[Phone(ErrorMessage = "Validate_Phone")]
[DataType(DataType.PhoneNumber)] // スキャフォールディングするときはコメントアウトする
public string Phone { get; set; }
[Display(Name = "PostalCode_DisplayName")]
[DataType(DataType.PostalCode)]
public string PostalCode { get; set; }
[Display(Name = "CreditCard_DisplayName")]
[CreditCard(ErrorMessage = "Validate_CreditCard")]
[DataType(DataType.CreditCard)] // スキャフォールディングするときはコメントアウトする
public string CreditCard { get; set; }
[Display(Name = "Money_DisplayName")]
[DataType(DataType.Currency)]
public decimal Money { get; set; }
[Display(Name = "StartDateTime_DisplayName")]
[DataType(DataType.DateTime)]
public DateTime StartDateTime { get; set; }
[Display(Name = "WakeUpTime_DisplayName")]
[DataType(DataType.Time)]
public TimeSpan WakeUpTime { get; set; }
[Display(Name = "Homepage_DisplayName")]
[Url(ErrorMessage = "Validate_Url")]
[DataType(DataType.Url)] // スキャフォールディングするときはコメントアウトする
public string Homepage { get; set; }
[Display(Name = "MyImage_DisplayName")]
[Url(ErrorMessage = "Validate_Url")]
[DataType(DataType.ImageUrl)] // スキャフォールディングするときはコメントアウトする
public string MyImage { get; set; }
[Display(Name = "MyColor_DisplayName")]
public string MyColor { get; set; }
[Display(Name = "WorkingDays_DisplayName")]
[MaxLength(5, ErrorMessage = "Validate_MaxLength")]
[EnumDataType(typeof(DayOfWeek))]
public DayOfWeek[] WorkingDays { get; set; }
[Display(Name = "VacationDay_DisplayName")]
[MinLength(3, ErrorMessage = "Validate_MinLength")]
[EnumDataType(typeof(DayOfWeek))]
public DayOfWeek[] VacationDay { get; set; }
[Display(Name = "Comment_DisplayName")]
[StringLength(200, ErrorMessage = "Validate_StringLength")]
[DataType(DataType.MultilineText)]
public string Comment { get; set; }
[Display(Name = "FileName_DisplayName")]
[FileExtensions(Extensions = "png", ErrorMessage = "Validate_FileExtensions")]
public string FileName { get; set; }
[Display(Name = "UploadFile_DisplayName")]
[DataType(DataType.Upload)]
public List<IFormFile> UploadFile { get; set; }
[Display(Name = "Month_DisplayName")]
public DateTime Month { get; set; }
[Display(Name = "Search_DisplayName")]
public string Search { get; set; }
[Display(Name = "Range_DisplayName")]
[Range(10, 100, ErrorMessage = "Validate_Range")]
public int Range { get; set; }
[Display(Name = "Week_DisplayName")]
public string Week { get; set; }
[Display(Name = "IsAccepted_DisplayName")]
[Required(ErrorMessage = "Validate_Required")]
public bool IsAccepted { get; set; }
}
public enum GenderType
{
None,
Man,
Woman,
Other,
}
}
هومكونترولر.cs
using LocalizationDataAnnotation.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
namespace LocalizationDataAnnotation.Controllers
{
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
return View();
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
public IActionResult Create()
{
SetDayOfWeeksViewData();
return View();
}
[HttpPost]
public IActionResult Create(UserViewModel model)
{
SetDayOfWeeksViewData();
// エラーなら差し戻し
if (ModelState.IsValid == false) return View(model);
// 正常に登録できた場合は Index に戻る
return RedirectToAction(nameof(Index));
}
<summary>曜日の一覧を ViewData に設定します。</summary>
private void SetDayOfWeeksViewData()
=> ViewData["DayOfWeeks"] = ((DayOfWeek[])Enum.GetValues(typeof(DayOfWeek))).Select(x => new SelectListItem(x.ToString(), ((int)x).ToString()));
}
}
إنشاء.cshtml
@model LocalizationDataAnnotation.Models.UserViewModel
@using System.Globalization;
@{
ViewData["Title"] = "Create";
}
<h1>Create</h1>
<h4>UserViewModel</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Create" enctype="multipart/form-data" >
<div asp-validation-summary="ModelOnly" 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">
<label asp-for="Password" class="control-label"></label>
<input asp-for="Password" class="form-control" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="ConfirmPassword" class="control-label"></label>
<input asp-for="ConfirmPassword" class="form-control" />
<span asp-validation-for="ConfirmPassword" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Email" class="control-label"></label>
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Age" class="control-label"></label>
<input asp-for="Age" class="form-control" />
<span asp-validation-for="Age" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Gender"></label>
<div>
<label><input type="radio" asp-for="Gender" value="@(GenderType.None)" />@(GenderType.None)</label>
<label><input type="radio" asp-for="Gender" value="@(GenderType.Man)" />@(GenderType.Man)</label>
<label><input type="radio" asp-for="Gender" value="@(GenderType.Woman)" />@(GenderType.Woman)</label>
</div>
<span asp-validation-for="Gender" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Birthday" class="control-label"></label>
<input asp-for="Birthday" class="form-control" />
<span asp-validation-for="Birthday" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Phone" class="control-label"></label>
<input asp-for="Phone" class="form-control" />
<span asp-validation-for="Phone" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="PostalCode" class="control-label"></label>
<input asp-for="PostalCode" class="form-control" />
<span asp-validation-for="PostalCode" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="CreditCard" class="control-label"></label>
<input asp-for="CreditCard" class="form-control" />
<span asp-validation-for="CreditCard" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Money" class="control-label"></label>
<input asp-for="Money" class="form-control" />
<span asp-validation-for="Money" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="StartDateTime" class="control-label"></label>
<input asp-for="StartDateTime" class="form-control" />
<span asp-validation-for="StartDateTime" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="WakeUpTime" class="control-label"></label>
<input asp-for="WakeUpTime" class="form-control" />
<span asp-validation-for="WakeUpTime" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Homepage" class="control-label"></label>
<input asp-for="Homepage" class="form-control" />
<span asp-validation-for="Homepage" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="MyImage" class="control-label"></label>
<input asp-for="MyImage" class="form-control" />
<span asp-validation-for="MyImage" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="MyColor" class="control-label"></label>
<input asp-for="MyColor" class="form-control" type="color" />
<span asp-validation-for="MyColor" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="WorkingDays" class="control-label"></label>
<select asp-for="WorkingDays" class="form-control" asp-items="@((IEnumerable<SelectListItem>)ViewData["DayOfWeeks"])" multiple></select>
<span asp-validation-for="WorkingDays" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="VacationDay" class="control-label"></label>
<select asp-for="VacationDay" class="form-control" asp-items="@((IEnumerable<SelectListItem>)ViewData["DayOfWeeks"])" multiple></select>
<span asp-validation-for="VacationDay" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Comment" class="control-label"></label>
<textarea asp-for="Comment" class="form-control"></textarea>
<span asp-validation-for="Comment" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="FileName" class="control-label"></label>
<input asp-for="FileName" class="form-control" />
<span asp-validation-for="FileName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="UploadFile" class="control-label"></label>
<input asp-for="UploadFile" type="file" multiple />
<span asp-validation-for="UploadFile" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Month" class="control-label"></label>
<input asp-for="Month" class="form-control" type="month" />
<span asp-validation-for="Month" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Search" class="control-label"></label>
<input asp-for="Search" class="form-control" type="search" />
<span asp-validation-for="Search" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Range" class="control-label"></label>
<input asp-for="Range" class="form-control" type="range" min="10" max="100" />
<span asp-validation-for="Range" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Week" class="control-label"></label>
<input asp-for="Week" class="form-control" type="week" />
<span asp-validation-for="Week" 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" asp-route-culture="@CultureInfo.CurrentCulture.Name" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Back to List</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}