【问题标题】:How do you update a viewmodel with radiobutton selected value from ajax call?如何使用来自 ajax 调用的单选按钮选择值更新视图模型?
【发布时间】:2019-12-13 01:37:36
【问题描述】:

我对前端很陌生,无法找到解决这个简单问题的明确解决方案。 在 Visual 2017 c# ASP.NET Framework MVC 项目中,对于只有一个提交按钮的单个页面,该按钮已用于更新我的模型 totalInfo 的某些字符串,我想从选定的值更新我的模型的整数属性 ModelltypeForView n 单选按钮。

我了解到我可以通过 AJAX 调用更新我的控制器模型,但是我找不到更新我的视图模型的方法,我必须错过一些简单但对初学者来说并不明显的东西。

这是我的 MVC 的主要部分。

我知道由于我的控制器的 SettModelltype 的返回类型以及我的视图的 ajax 和 foreach 循环导致的问题,所以基本上:我该如何完成这段代码?这个问题甚至可以在没有任何局部视图的情况下解决吗?

非常感谢您的宝贵时间。


// Model TotalInfoModell.cs

public class TotalInfoModell
{
        public List<Modelltype> Modelltyper { get; set; }
        public int ModelltypeForView { get; set; }
}

public class Modelltype
{
        public int MTIndex { get; set; }
        public string MTName { get; set; }
        public bool MTSelected { get; set; } //? useless?
}

// Controller MainController.cs

static TotalInfoModell _totalInfo;

[HttpGet]
public ActionResult Main()
{
    if (_totalInfo == null)
    {
        _totalInfo = new TotalInfoModell();
    }
    return View(_totalInfo);
}

[HttpPost]
public ActionResult SettModelltype(TotalInfoModell totalInfoFraView)
{
      _totalInfo.ModelltypeForView = totalInfoFraView.ModelltypeForView;
      for (int i = 0; i < _totalInfo.Modelltyper.Count; i++)
      {
         _totalInfo.Modelltyper[i].MTSelected = (i == _totalInfo.ModelltypeForView);
       }   /// Could be useless

       return RedirectToAction("Main");   //????
}

// View Main.cshtml
@foreach (var modelltype in Model.Modelltyper)
{
      @Html.RadioButtonFor(i => modelltype.MTIndex == Model.ModelltypeForView, modelltype.MTIndex, new { @class = "MTSelected" })   // ????
      @modelltype.MTName<br />
}
...


<script>
    $(function () {
        $('.MTSelected').change(function () {
            var viewModel = {
                    "ModelltypeForView": $('.MTSelected:checked').val(),
                };
            $.ajax({
                url: '@Url.Action("SettModelltype", "Main")',
                data: viewModel,
                type: 'POST',
                success: function (data) {
                },
                error: function (xhr) {
                    alert("It didn't work");
                }
            }).done(function (data) {
                alert("Done");
                $('#Id').val(data.ModelltypeForView);   //??? Should return totalInfoModell
            });
        });
    });
</script>

【问题讨论】:

    标签: asp.net-mvc visual-studio model radio-button asp.net-ajax


    【解决方案1】:

    我不确定我是否理解。你想通过重定向传回你的视图模型吗?

    如果是这种情况,您可以将其添加为参数。 Here is a post that can help

    【讨论】:

    • 嗨,不,这是代码的随机部分之一......我想将我刚刚更新的模型从控制器传递回具有更新后的 ModelltypeForView 值的视图。这样我就可以在 check = modelltype.MTIndex == Model.ModelltypeForView 或类似的情况下更新我的单选按钮,因为这种语法是错误的。问题是一旦我单击视图的提交按钮以更新模型的其余部分,单选按钮都未选中。我不知道如何通过 ajax 调用将我的值传递回视图中的模型。
    • 您可以将视图模型返回为 json 并在 ajax 调用的成功函数中设置视图中的值:return Json(_totalInfo.ModelltypeForView)
    • 好的,谢谢,它给了我一个丢东西的方法。只是一个问题:我最终在 ajax 调用中检索我的 ModelltypeForView 值,如下所示:success: function (response) { $("#ModelltypeForView").val(response);但如果我不在文本框中使用 model.ModellTypeForView 或在视图中不使用 hiddenfor,则不会更新该值。正常吗?
    猜你喜欢
    • 2016-03-31
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多