将字符串转换为 html 字符串时,Razor Ajax 表单未提交
Razor Ajax form not submitting when converting string to html string
我是剃须刀和显示模板的新手,所以请纠正我的错误。我正在处理一个包含 HTML 的字符串。如果我尝试 converting it directly to a HtmlString,我的 Ajax 表单将拒绝提交。作为一种解决方法,我尝试使用显示模板来实现如下目标:
我有一个 ajax 形式的部分视图:
MyPartialView.cshtml
@model IEnumerable<MyProject.Areas.MyArea.Models.MyComment>
@using (Ajax.BeginForm("ActionThatHandlesMulipleSubmits", null,
new AjaxOptions
{
HttpMethod = "POST", // HttpPost
InsertionMode = InsertionMode.Replace, // empty the target first
UpdateTargetId = "commentTbl" // place content within #commentTbl
}, new { @class = "form-inline" }))
{
<div class="ibox float-e-margins">
<div class="ibox-title">...</div>
<div class="ibox-content">
<div class="table-responsive">
<table id="dataTables-comments">
<thead>...</thead>
<tbody>
@{int i = 0;}
@foreach (var myModel in Model)
{
<tr>
<td>
<div id="summernote_@i" onclick="loadRichTextEditor(@i);">@Html.DisplayFor(modelItem => myModel.myString, "HtmlString")
</td>
<td>
<button type="submit" id="save_@i" class="btn btn-primary" name="Save" value='submitAction'>Save</button>
<button type="submit" id="delete_@i" class="btn btn-primary" name="Delete" value='submitAction'>Delete</button>
</td>
</tr> i++;
}
</tbody>
</table>
</div>
</div>
</div>
}
我的 @foreach
循环包含这个
@Html.DisplayFor(modelItem => myModel.myString, "HtmlString")
我的 DisplayTemplate 包含这个
HtmlString.cshtml
@model String
@{
@Html.Raw(Model)
}
所以如果 myString = "<ul><li>my text</li></ul>"
我希望我的 ajax 表单显示
- 我的文本
现在文本显示正确,但表单拒绝提交。如果我正常显示字符串,表单将毫无问题地提交。请帮助我做错了什么。
更新:下面是呈现的HTML表单源
所以事实证明这与我的视图无关,而是与控制器有关。根据我的理解,由于我将 HTML 发送回服务器,这导致了问题。我添加了
[ValidateInput(false)]
添加到控制器中的 Action 中,现在可以完美运行了。所以我的控制器看起来像这样:
[HttpPost]
[ValidateInput(false)]
public void ActionThatHandlesMultipleSubmits(MyComment mycomment, String submitAction)
我是剃须刀和显示模板的新手,所以请纠正我的错误。我正在处理一个包含 HTML 的字符串。如果我尝试 converting it directly to a HtmlString,我的 Ajax 表单将拒绝提交。作为一种解决方法,我尝试使用显示模板来实现如下目标:
我有一个 ajax 形式的部分视图:
MyPartialView.cshtml
@model IEnumerable<MyProject.Areas.MyArea.Models.MyComment>
@using (Ajax.BeginForm("ActionThatHandlesMulipleSubmits", null,
new AjaxOptions
{
HttpMethod = "POST", // HttpPost
InsertionMode = InsertionMode.Replace, // empty the target first
UpdateTargetId = "commentTbl" // place content within #commentTbl
}, new { @class = "form-inline" }))
{
<div class="ibox float-e-margins">
<div class="ibox-title">...</div>
<div class="ibox-content">
<div class="table-responsive">
<table id="dataTables-comments">
<thead>...</thead>
<tbody>
@{int i = 0;}
@foreach (var myModel in Model)
{
<tr>
<td>
<div id="summernote_@i" onclick="loadRichTextEditor(@i);">@Html.DisplayFor(modelItem => myModel.myString, "HtmlString")
</td>
<td>
<button type="submit" id="save_@i" class="btn btn-primary" name="Save" value='submitAction'>Save</button>
<button type="submit" id="delete_@i" class="btn btn-primary" name="Delete" value='submitAction'>Delete</button>
</td>
</tr> i++;
}
</tbody>
</table>
</div>
</div>
</div>
}
我的 @foreach
循环包含这个
@Html.DisplayFor(modelItem => myModel.myString, "HtmlString")
我的 DisplayTemplate 包含这个
HtmlString.cshtml
@model String
@{
@Html.Raw(Model)
}
所以如果 myString = "<ul><li>my text</li></ul>"
我希望我的 ajax 表单显示
- 我的文本
现在文本显示正确,但表单拒绝提交。如果我正常显示字符串,表单将毫无问题地提交。请帮助我做错了什么。
更新:下面是呈现的HTML表单源
所以事实证明这与我的视图无关,而是与控制器有关。根据我的理解,由于我将 HTML 发送回服务器,这导致了问题。我添加了
[ValidateInput(false)]
添加到控制器中的 Action 中,现在可以完美运行了。所以我的控制器看起来像这样:
[HttpPost]
[ValidateInput(false)]
public void ActionThatHandlesMultipleSubmits(MyComment mycomment, String submitAction)