如何从Index.chtml存储和编辑数据

本文关键字:编辑 数据 存储 chtml Index | 更新日期: 2023-09-27 17:59:57

我有一个包含4个字段的模型:

    public string facility { get; set; }
    public string hub{ get; set; }
    public double customerCount { get; set; }
    public double cmtsValue { get; set; }

cmtsValue是customercount除以每个customercount的总和,如下所示:

        @{     
                double totalValues = Model.Sum(c => c.customerCount);
                double cmtsValue = (item.customerCount / (totalValues * 1.0));
                @Html.Raw(cmtsValue.ToString("0.##%"))
        }

这个公式是在Index.cshtml中使用Razor代码完成的。在视图中,它正确显示,但在数据库中,它仍然存储为0,如何直接从index.cshtml保存更改或编辑值?我尝试过使用Create.cshtml和Edit.cshtml的方法,但没有成功

编辑:我尝试在我的ViewController中添加一个方法:

    public void SaveCMTSValue(int? id, double totalValues, double cmtsValue)
    {
        FacilityEditor facilityEditor = db.FacilityEditor.Find(id);
        if(ModelState.IsValid)
        {
            facilityEditor.cmtsValue = cmtsValue;
            db.SaveChanges();
        }
    }

然后在我的Index.chtml中是以下代码:

        @{

            double totalValues = Model.Sum(c => c.customerCount);
            double cmtsValue = (item.customerCount / (totalValues * 1.0));
                @Html.Raw(cmtsValue.ToString("0.##%"))

            @Html.ActionLink("SaveCMTSValue", "SaveCMTSValue", "FacilityEditor", new { id = item.ID, totalValues = totalValues, cmtsValue = cmtsValue })
        }

但我只是收到了一个错误,如果我想自动添加数据,什么可以代替actionlink。

错误:在执行当前web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。

如何从Index.chtml存储和编辑数据

您使用了错误的Html.ActionLink方法重载。

使用此

 @Html.ActionLink("SaveCMTSValue", "SaveCMTSValue", "FacilityEditor"
            , new { id = item.ID, totalValues = totalValues, cmtsValue = cmtsValue }
            , new { id="saveCmt"})

这将生成一个链接,并单击具有与操作方法参数名称匹配的查询字符串值的链接,以便模型绑定可以工作。

现在,当用户单击链接时,它将是对SaveCMTSValue操作方法的GET请求,querystring中包含id、totalValues和cmtsValues。这意味着任何人都可以尝试访问url,并在querystring参数中传递您想要的任何数据,您的代码会将其保存到db表中。

通常,使用HttpPost操作来更新数据库表值是个好主意。因此,我建议您将操作方法转换为HttpPost类型。

[HttpPost]
public void SaveCMTSValue(int? id, double totalValues, double cmtsValue)
{
      // save
}

现在点击链接通常会发出GET请求。为了使用HttpPost,我们需要捕获该链接上的点击事件,并使用ajax发出HttpPost调用。

$(function(){
  $("#saveCmt").cilck(function(e){
     e.preventDefault();
     $.post($(this).attr("href"),function(res){
        alert("Updated");
     });
  });
});

我还建议您只需使用id并再次获取数据,然后在操作方法中进行计算并再次生成值,然后使用该值进行保存。

[HttpPost]
public void SaveCMTSValue(int? id)
{
  // with id, get the releavnt data, generate the value and save
}