标签: ajax.beginform

MVC 3 Ajax.beginform提交 - 导致完全回发

嗨,我想尝试使用mvc 3来掌握ajax.beginform.

我有两个表单,一个HTML.BeginForm可以正常工作,一个Ajax.BeginForm在局部视图中.ajax表单的帖子是为模型添加注释.

问题是ajax提交是在主视图中提交包括HTML.BeginForm在内的整个页面而不是用note来执行异步帖子.

谁能看到我做错了什么?

我看了其他问题,并在web.config等中禁用了不显眼的javascript.

视图:

<div id="maincontent">
@using (Html.BeginForm())
{
  @Html.ValidationSummary(true)
  <fieldset>
    <legend>Edit Franchise</legend>
    <div class="editor-label">
      @Html.LabelFor(model => model.Name)
    </div>
    <div class="editor-field">
      @Html.EditorFor(model => model.Name)
      @Html.ValidationMessageFor(model => model.Name)
    </div>
    <div class="editor-label">
      @Html.LabelFor(model => model.FirstLine)
    </div>
    <div class="editor-field">
      @Html.EditorFor(model => model.FirstLine)
      @Html.ValidationMessageFor(model => model.FirstLine)
    </div>
    <div class="editor-label">
      @Html.LabelFor(model => model.SecondLine)
    </div>
    <div class="editor-field">
      @Html.EditorFor(model => model.SecondLine)
      @Html.ValidationMessageFor(model => model.SecondLine)
    </div>
    <div class="editor-label">
      @Html.LabelFor(model => model.City)
    </div>
    <div class="editor-field">
      @Html.EditorFor(model => model.City)
      @Html.ValidationMessageFor(model => model.City)
    </div>
    <div class="editor-label">
      @Html.LabelFor(model => …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc partial-views ajax.beginform asp.net-mvc-3

2
推荐指数
1
解决办法
1万
查看次数

Ajax.BeginForm没有做它应该做的事情?

我有一个对话框,其中有选项卡.在其中一个选项卡中,显示用户输入的地址.还有一个按钮,允许用户添加新地址.当用户单击该按钮时,当前选项卡的内容将替换为"添加"视图.

我在这里要完成的是允许用户添加地址,一旦他们点击确定,表单应该通过AJAX调用提交,然后应该使用"索引"视图的内容更新选项卡(显示用户的地址).

不幸的是,这不能正常工作.它不是通过AJAX调用提交表单,而是进行常规的后期操作,并在白色背景上显示索引视图,而不是在选项卡中显示.

这是我的代码:

    [HttpPost]
    public ActionResult Add(AddressDto model)
    {
        if(!ModelState.IsValid)
        {
            return PartialView(model);
        }
        Area area = null;
        if(!string.IsNullOrEmpty(model.Area))
        {
            area = _addressService.GetAreaByName(model.Area);
        }
        var newAdd = new Address
                         {
                             Details = model.Details,
                             Name = model.Name,
                             IsDefaultAddress = false,
                             CountryName = _addressService.GetCountryById(int.Parse(model.Country)).Name,
                             User = _helper.GetUserFromSession(HttpContext.User.Identity.Name)
                         };
        if(area != null)
            area.Addresses.Add(newAdd);
        else 
            _addressService.Create(newAdd);
        _unitOfWork.Commit();
        var indexViewModel = PrepareIndexView();
        return PartialView("Index", indexViewModel);
    }

    private UserLocationViewModel PrepareIndexView()
    {
        var nickname = this.HttpContext.User.Identity.Name;
        var user = _helper.GetUserFromSession(nickname, true);
        var viewModel = Mapper.Map<User, UserLocationViewModel>(user); …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-ajax ajax.beginform asp.net-mvc-3

2
推荐指数
1
解决办法
1158
查看次数

调用返回JsonResult的操作的MVC Ajax.BeginForm在客户端上不成功

我正在尝试使用.Net的Ajax.BeginForm来提交表单并获取对象列表.

@using (Ajax.BeginForm("ValidateEmployee", new AjaxOptions { OnBegin = "onBegin", OnSuccess = "onSucess", UpdateTargetId = "results"} )
Run Code Online (Sandbox Code Playgroud)

问题是,当我的控制器返回一个JsonResult并将我返回的列表转换为json时,永远不会调用OnSuccess回调,并且不会更新我的id为"results"的div.但是调用onBegin回调.控制器看起来像这样.

public JsonResult ValidateEmployee(Employee emp)
{
    ...
    List<Role> roles = new Role();
    foreach(var x in myCollection)
    {
        roles.Add(new Role { ID = x.ID, Name = x.Name });
    }
    return Json(roles);
}
Run Code Online (Sandbox Code Playgroud)

我已经确认Json(roles)将列表正确转换为有效的json.但我无法使用它,因为onSuccess永远不会运行.

奇怪的是,如果我不列表转换成JSON,就回到它作为.NET名单,这两个回调是碰我的元素,更新输出System.Collections.Generic.List'1 [Models.Role.所以它不是json,我没有办法使用数据.

那么为什么当我从控制器返回一个json对象时没有调用onSuccess?

我正在使用MVC 3,我正在引用jquery.unobtrusive-ajax.js.

谢谢你的帮助.

ajax.beginform jsonresult asp.net-mvc-3

2
推荐指数
1
解决办法
4032
查看次数

如何在Ajax.Beginform中使用@ Html.RenderPartial?

是否可以在@using(Ajax.BeginForm)代码块中使用@ Html.RenderPartial?如果我使用@ Html.RenderPartial它不起作用,如果我将整个razor代码直接放在@using(Ajax.BeginForm)块中,它就可以工作.

任何人都可以建议是否可能?

renderpartial ajax.beginform asp.net-mvc-4

2
推荐指数
1
解决办法
3436
查看次数

MVC5 Ajax.BeginForm刷新整个页面

为什么表单帖子没有通过ajax发生,而是重新加载到新页面?

我的.js包括:

<script src="/App/JavaScript/Libraries/jquery-1.11.1-min.js"></script>
<script src="/App/JavaScript/Libraries/jquery.validate.js"></script>
<script src="/App/JavaScript/Libraries/jquery.validate.unobtrusive.js"></script>
Run Code Online (Sandbox Code Playgroud)

我的剃刀观点:

<div id="login-partial-update">
@using (Ajax.BeginForm("Login",null, new AjaxOptions
{
    UpdateTargetId = "login-partial-update",
    HttpMethod = "POST"
}, new { id = "js-form-login" }))
{
    @Html.TextBoxFor(x => x.Email, new {placeholder = "Email address"})
    <div class="errormessage">
        @Html.ValidationMessageFor(x=>x.Email)
    </div>
    @Html.PasswordFor(x => x.Password, new {placeholder = "Password"})
    <div class="errormessage">
        @Html.ValidationMessageFor(x => x.Password)
    </div>
}
</div>
Run Code Online (Sandbox Code Playgroud)

我的控制器代码:

[HttpPost]
public ActionResult Login(LoginInputModel login)
{
     return PartialView("Widgets/Popups/_LoginInput", login);
}
Run Code Online (Sandbox Code Playgroud)

我忘记了什么吗?

c# asp.net-mvc ajax.beginform

2
推荐指数
3
解决办法
1万
查看次数

防止在Ajax.BeginForm上重新加载

在部分视图中提交表单时,如何防止页面重新加载?有很多例子,但似乎没有一个例子对我有用。这就是我所拥有的。局部视图(Razor)调用此:

@using (Ajax.BeginForm("SaveReply", "Home", null, new AjaxOptions { HttpMethod = "Post" }, new { target = "_self" }))
{
    <div class="input-group wall-comment-reply" style="width:100%">
        @Html.Hidden("eventid", @item.EventID)
        <input name="txtReply" type="text" class="form-control" placeholder="Type your message here...">
        <span class="input-group-btn">
            <button class="btn btn-primary" id="btn-chat" type="submit">
                <i class="fa fa-reply"></i> Reply
            </button>
        </span>
    </div>
}
Run Code Online (Sandbox Code Playgroud)

然后在控制器中有我的操作方法:

[HttpPost]
public void SaveReply(string txtReply, string eventid)
{
    //some code

}
Run Code Online (Sandbox Code Playgroud)

控制器动作被触发,但是之后它会自动重定向到localhost / home / SaveReply

也许问题在于此局部视图是从字符串渲染的。我从以下代码中获取了代码:

如何在ASP.NET MVC 3中将Razor View呈现为字符串?

除了其他我尝试过的东西:

http://geekswithblogs.net/blachniet/archive/2011/08/03/walkthrough-updating-partial-views-with-unobtrusive-ajax-in-mvc-3.aspx

我将不胜感激任何帮助。

ajax asp.net-mvc ajax.beginform razor

2
推荐指数
1
解决办法
2553
查看次数

使用Ajax在Validationsummary中显示错误消息

目标:
如果您根据输入检索错误,则应在ValidationSummary中显示与ajax相关的错误,而不会刷新网页.

问题:
我试图制作它,但它不能很好地工作.

我错过了哪一部分?

谢谢!

信息:
*我发现了一些网页,但它们并不完全符合我的目的.
*我正在使用ASP.net mvc

@model WebApplication1.Controllers.PersonnelModel

@{
    ViewBag.Title = "Ajax";
}

<h2>Ajax</h2>



<h2>AjaxViewModel</h2>
@using (Html.BeginForm("HtmlViewModel", "Home", null))
{
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>PersonnelModel</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.UserName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.UserName)
            @Html.ValidationMessageFor(model => model.UserName)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.MailAdress)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.MailAdress)
            @Html.ValidationMessageFor(model => model.MailAdress)
        </div>
    </fieldset>
    <p>
        <input type="submit" value="Html Form Action" />
    </p>
}

<br/>
<br />




<h2>AjaxViewModel</h2>
@using (Ajax.BeginForm("AjaxViewModel", "Home", new AjaxOptions { UpdateTargetId = "result" …
Run Code Online (Sandbox Code Playgroud)

c# ajax asp.net-mvc ajax.beginform

1
推荐指数
1
解决办法
4924
查看次数