You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sinan merhaba,
Kütüphaneni çok beğendim, aşağıdaki yorumlarımın ,razor tarafı içinde geliştirme yapmak istersen yararlı olacağını düşünüyorum.
Asp.net core razor da action filters mevcut değil onun yerine pagefilters var.Ayrıca antiforgery token kontrolü otomatik olarak yapılıyor.Bunun için hiç bir şey yapmaya gerek yok.
Benim gibi Razor kullananlar için aşağıdaki filteriyi yazdım.
Bunların seninde bildiğin gibi normalde scriptler dom bloklamamak adına body tag inin altına yazılır.Böyle olunca FormHelperTagHelper in eklediği script satırı daha jquery yüklenmediği $ undefined hatası veriyor.Orayı da javascript window load ile fonksiyonu ile değiştirdim.<script>window.addEventListener('load',function () {{$('#{formId}').UseFormHelper()
public class FormValidatorRazor : IAsyncPageFilter
{
public bool UseAjax { get; set; } = true;
/// <summary>
/// Called before the handler method executes, after model binding is complete.
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
public async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)
{
if (context.HttpContext.Request.Method.Equals("POST") || context.HttpContext.Request.Method.Equals("PUT"))
{
var httpContext = context.HttpContext;
var modelState = context.ModelState;
if (UseAjax)
{
if (!httpContext.Request.IsAjaxRequest())
{
if (context.HandlerInstance is PageModel result) //using pattern matching
{
result.Response.StatusCode = 400;
context.Result = result.Page();
}
await Task.CompletedTask;
}
if (!modelState.IsValid)
{
var errorModel =
from x in modelState.Keys
where modelState[x].Errors.Count > 0
select new
{
key = x,
errors = modelState[x].Errors.
Select(y => y.ErrorMessage).
ToArray()
};
var formResult = new FormResult(FormResultStatus.Error)
{
ValidationErrors = new List<FormResultValidationError>()
};
foreach (var propertyError in errorModel)
{
if (propertyError.key == "")
{
foreach (var error in propertyError.errors)
{
formResult.Message += error;
if (propertyError.errors.Length > 1 && error != propertyError.errors.Last())
formResult.Message += "<br>";
}
continue;
}
var errorMessage = new StringBuilder();
foreach (var error in propertyError.errors)
{
errorMessage.Append(error);
if (propertyError.errors.Length > 1 && error != propertyError.errors.Last())
errorMessage.Append("<br>");
}
formResult.ValidationErrors.Add(new FormResultValidationError
{
PropertyName = propertyError.key,
Message = errorMessage.ToString()
});
}
context.Result = new JsonResult(formResult);
return;
}
}
else
{
var services = httpContext.RequestServices;
var metadataProvider = services.GetService<IModelMetadataProvider>();
var currentModel = context.HandlerInstance;
var viewResult = new ViewResult
{
ViewData = new ViewDataDictionary(metadataProvider, modelState)
};
viewResult.ViewData.Model = currentModel;
context.Result = viewResult;
}
}
await next.Invoke();
}
public async Task OnPageHandlerSelectionAsync(PageHandlerSelectedContext context)
{
await Task.CompletedTask;
}
}
The text was updated successfully, but these errors were encountered:
Olumlu yorumun ve katkın için teşekkür ederim. Bu değişiklikleri yapıp pull request gönderirsen sevinirim, başka kullananların da işine yarayacaktır. Kütüphaneye dahil edebilirim.
Sinan merhaba,
Kütüphaneni çok beğendim, aşağıdaki yorumlarımın ,razor tarafı içinde geliştirme yapmak istersen yararlı olacağını düşünüyorum.
Asp.net core razor da action filters mevcut değil onun yerine pagefilters var.Ayrıca antiforgery token kontrolü otomatik olarak yapılıyor.Bunun için hiç bir şey yapmaya gerek yok.
Benim gibi Razor kullananlar için aşağıdaki filteriyi yazdım.
Bunların seninde bildiğin gibi normalde scriptler dom bloklamamak adına body tag inin altına yazılır.Böyle olunca FormHelperTagHelper in eklediği script satırı daha jquery yüklenmediği $ undefined hatası veriyor.Orayı da javascript window load ile fonksiyonu ile değiştirdim.<script>window.addEventListener('load',function () {{$('#{formId}').UseFormHelper()
The text was updated successfully, but these errors were encountered: