Asp.net mvc Ajax.BeginForm替代onchange=this.form.submit()
我有一个表,每行有一个Ajax.BeginForm。这样可以很好地将数据传递给控制器 但是,它不会在控制器上激发Request.IsAjaxRequest(),因为表单post(thanx HTX9指出了这一点!)。真正的问题是它返回一个局部视图,而不是在当前视图中更新它 下面可以看到两个字段集。第一个是我想要更新的,下面的一个是用Ajax.BeginForm将数据发送到控制器的 换句话说:当我在下拉列表中选择某个内容时,它会更新上面的表,但会在新的局部视图中打开它 我在_layout视图中使用了不引人注目的ajax js,在应用程序的另一部分中使用了类似的设置,使用带有按钮的post数据Asp.net mvc Ajax.BeginForm替代onchange=this.form.submit(),asp.net-mvc,jquery,asp.net-mvc-4,razor-2,Asp.net Mvc,Jquery,Asp.net Mvc 4,Razor 2,我有一个表,每行有一个Ajax.BeginForm。这样可以很好地将数据传递给控制器 但是,它不会在控制器上激发Request.IsAjaxRequest(),因为表单post(thanx HTX9指出了这一点!)。真正的问题是它返回一个局部视图,而不是在当前视图中更新它 下面可以看到两个字段集。第一个是我想要更新的,下面的一个是用Ajax.BeginForm将数据发送到控制器的 换句话说:当我在下拉列表中选择某个内容时,它会更新上面的表,但会在新的局部视图中打开它 我在_layout视图中使用
<fieldset>
<legend>Direktbyten</legend>
<div id="container-grid2">
@Html.Partial("_RatingList2", Model.Models2)
</div>
</fieldset>
<fieldset>
<legend>Omarkerade byten(@ViewBag.DirectCount)</legend>
<div id="RatingList">
<table>
<thead>
<tr>
<td>Se hela</td>
<td>Hyra</td>
<td>Rum</td>
<td>Kvm</td>
<td>Gata</td>
<td>Område</td>
<td>Deras prio</td>
<td>Totaltvärde</td>
<td>Min prio</td>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Models1)
{
using (Ajax.BeginForm("UpdateRatingListRow", new AjaxOptions { UpdateTargetId = "container-grid2" }))
{
@Html.Hidden("RatingListId", item.RatingListId)
<tr>
<td>@Html.ActionLink("Till annons", "ViewAd", "Ad", new { id = item.CustomerId }, null)
</td>
<td>@item.Rent</td>
<td>@item.Rooms</td>
<td>@item.SquareMeters</td>
<td>@item.Street</td>
<td>@item.Area</td>
<td>@item.TheirRating</td>
<td>@item.TotalRating</td>
<td>
@Html.Raw("<div id='" + item.RatingListId + "'>")
<select name="SelectedValue" onchange="this.form.submit();">
<option value="0"@if (item.MyRating == "00")
{
@Html.Raw("selected")
}>Ny</option>
<option value="10" @if (item.MyRating == "10")
{
@Html.Raw("selected")
}>Inget intresse</option>
<option value="50"@if (item.MyRating == "50")
{
@Html.Raw("selected")
}>Svagt intressse</option>
<option value="60"@if (item.MyRating == "60")
{
@Html.Raw("selected")
}>Litet intresse-vill ej ha kontakt</option>
<option value="70"@if (item.MyRating == "70")
{
@Html.Raw("selected")
}>Intresserad-Vill ha kontakt</option>
<option value="80"@if (item.MyRating == "80")
{
@Html.Raw("selected")
}>Varit på visning-Vill gå vidare</option>
<option value="90"@if (item.MyRating == "90")
{
@Html.Raw("selected")
}>Intresserad-Vill ha kontakt</option>
<option value="100"@if (item.MyRating == "100")
{
@Html.Raw("selected")
}>Avvaktar värdar</option>
</select>@item.MyRating
@Html.Raw("</div>")
</td>
</tr>
}
}
</tbody>
</table>
</div>
</fieldset>
生成的Html:
这是我的“fulhack”(瑞典语中的丑陋的hack),在每行id上添加了一个按钮,然后我调用它进行提交。仍然希望有一个干净的解决方案,而不必重写大量代码
using (Ajax.BeginForm("UpdateRatingListRow", new AjaxOptions { UpdateTargetId = "container-grid2", OnSuccess = "OnSuccess('" + item.RatingListId + "')" }))
{
<input type="submit" id="@item.RatingListId" style="position: absolute; top: -1000px">
@Html.Hidden("RatingListId", item.RatingListId)
<tr>
<td>@Html.ActionLink("Till annons", "ViewAd", "Ad", new { id = item.CustomerId }, null)</td>
<td>@item.Rent</td>
<td>@item.Rooms</td>
<td>@item.SquareMeters</td>
<td>@item.Street</td>
<td>@item.Area</td>
<td>@item.TheirRating</td>
<td>@item.TotalRating</td>
<td>@Html.Raw("<div id='" + item.RatingListId + "'>")
<select name="SelectedValue" onchange="document.getElementById(@item.RatingListId).click();">
<option value="0"@if (item.MyRating == "00")
使用(Ajax.BeginForm(“UpdateRatingListRow”,新的AjaxOptions{UpdateTargetId=“container-grid2”,OnSuccess=“OnSuccess(““+item.RatingListId+”)”)”)
{
@Html.Hidden(“RatingListId”,item.RatingListId)
@ActionLink(“直到annons”,“ViewAd”,“Ad”,new{id=item.CustomerId},null)
@项目.租金
@项目.房间
@项目1.平方米
@项目.街道
@项目.面积
@项目1.3说明
@项目1.TotalRating
@Html.Raw(“”)
当用户更改下拉列表选择时,您是否尝试过使用jQuery提交ajax请求?通过使用`onchange=“this.form.submit();”`您只是在普通HTML帖子中提交表单,这就是为什么request.IsAjaxRequest()
为false。@HTX9是的,我有。我没有按照我的要求更新另一个表。你知道如何将表单发布为ajax吗?通常我只是使用jQuery而不是ajax.BeginForm帮助程序编写ajax请求,但我会处理你的代码,看看是否能想出一个解决方案。
using (Ajax.BeginForm("UpdateRatingListRow", new AjaxOptions { UpdateTargetId = "container-grid2", OnSuccess = "OnSuccess('" + item.RatingListId + "')" }))
{
<input type="submit" id="@item.RatingListId" style="position: absolute; top: -1000px">
@Html.Hidden("RatingListId", item.RatingListId)
<tr>
<td>@Html.ActionLink("Till annons", "ViewAd", "Ad", new { id = item.CustomerId }, null)</td>
<td>@item.Rent</td>
<td>@item.Rooms</td>
<td>@item.SquareMeters</td>
<td>@item.Street</td>
<td>@item.Area</td>
<td>@item.TheirRating</td>
<td>@item.TotalRating</td>
<td>@Html.Raw("<div id='" + item.RatingListId + "'>")
<select name="SelectedValue" onchange="document.getElementById(@item.RatingListId).click();">
<option value="0"@if (item.MyRating == "00")