Чтобы предотвратить использование скриптов на стороне пользователя, я реализую CSP для одного из моих приложений. В настоящий момент я переконфигурирую все html-классы, так что javascript всегда приходит с моего сервера.MVC Ajax.BeginForm и политика безопасности содержимого
Теперь я нашел страницу с Ajax.BeginForm
и всегда получаю сообщение об ошибке «Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self'".
», если я хочу отправить форму и обновить представление.
Может ли кто-нибудь помочь мне, где проблема?
Вот мои HTML классы (замкнуты):
UserInformation.cshtml:
<div id="OpenAccountInformation">@Html.Action("OpenAccountInformation")</div>
</div>
AccountInformation.cshtml:
@Scripts.Render("~/Scripts/bundles/ManageUsers/AccountInformation")
@model Tumormodelle.Models.ViewModels.AzaraUserModel
<input type="hidden" value="@ViewBag.Editable" id="EditableUserInformation">
<div id="Editable">
@using (Ajax.BeginForm("EditUser", "ManageUsers", new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "OpenAccountInformation", HttpMethod = "post", }))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(m => m.UserID)
<div>
<div>
@Html.LabelFor(m => m.Username, new { @class = "entryFieldLabel" })
</div>
</div>
<div>
<div>
<button name="button" value="save" class="formbutton" id="saveButton">save</button>
<button name="button" value="cancel" class="formbutton" id="cancelButton">cancel</button>
</div>
}
</div>
<div id="NonEditable">
<div>
<div>
@Html.LabelFor(m => m.Username, new { @class = "entryFieldLabel" })
</div>
</div>
<div>
<div>
<button name="button" value="edit" class="formbutton" id="editButton" type="button">edit</button>
</div>
</div>
</div>
и C# методы:
public ActionResult EditUser(AzaraUserModel AzaraUserModel, string button)
{
if (button == Tumormodelle.Properties.Resources.Save)
{
if (ModelState.IsValid)
{
azaraUserManagement.Update(AzaraUserModel.Username, AzaraUserModel.Title, AzaraUserModel.FirstName, AzaraUserModel.LastName, AzaraUserModel.EMailAddress, null, AzaraUserModel.Phone, AzaraUserModel.UserID, (byte)AzaraUserModel.ShowMail.ID);
ViewBag.Message = Tumormodelle.Properties.Resources.Personal_Data_Changed;
ViewBag.Editable = true;
}
else ViewBag.Editable = false;
BindShowMailList();
return PartialView("AccountInformation", AzaraUserModel);
}
else
{
return RedirectToAction("OpenAccountInformation", "ManageUsers");
}
}
public ActionResult UserInformation()
{
return View("UserInformation");
}
public PartialViewResult OpenAccountInformation()
{
AzaraUserModel AzaraUserModel = new AzaraUserModel(azaraUserManagement.GetSingle(AzaraSession.Current.UserComparison.GetUser().Id));
BindShowMailList();
ViewBag.Editable = true;
return PartialView("AccountInformation", AzaraUserModel);
}
Редактировать: С помощью отладчика Chrome я узнаю, что ошибка забрасывается в момент отправки формы.
Нет, что не поможет :(Checkt с отладчиком Visual Studio кажется, что класс C# даже не попал, когда я нажимаю кнопку 'save'. С другой стороны, кнопка' cancel' отлично работает, но не нужно вызывать сервер. – Jastol