在ASP.NET MVC5中,表ID没有从视图传递到控制器

时间:2014-01-22 15:38:14

标签: c# asp.net-mvc razor partial-views

我正在使用asp.net mvc5应用程序,我有部分视图,我用于添加和删除操作,我有单独的actionResult来处理每个请求,因为这是jQuery Ajax函数的火....我有数字问题当我尝试编辑记录时。它选择正确的记录并在HttpGet actionResult中显示在屏幕上,但是当我提交带有更新字段的记录时,它不会在数据库中更新它,因为它不会将recordID {PK}发送回控制器中的操作,除非我使用隐藏值对于视图中的主键...但是有了这个我无法创建新的记录!

部分视图

@model DatabaseLayer.TableMappings.FeeZone

<script>

    function CancelPage() {
        $.ajax({
            type: "POST",
            url: "/Qualification/FeeZoneHome",
            dataType: 'json',
            success: function (jsonData) {
                window.location = jsonData.redirectUrl;
            },
            error: function (error) {
            }
        });
    }   
</script>

@using (Html.BeginForm())
{
 @Html.AntiForgeryToken()

 <div class="form-horizontal">
    <h4>FeeZone</h4>
    <hr />
    @Html.ValidationSummary(true)

    <!--<div class="form-group">
        <div class="col-md-10">
            @Html.HiddenFor(model => model.FeeZoneID)
        </div>
    </div>-->

    <div class="form-group">
        @Html.LabelFor(model => model.FeeZoneDescription, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.FeeZoneDescription)
            @Html.ValidationMessageFor(model => model.FeeZoneDescription)
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-default">
            <input type="button" value="Cancel" class="btn btn-default" onclick="CancelPage();" />
        </div>
    </div>
</div>
}

控制器方法

    [HttpGet]
    public ActionResult EditFreeZoneByID(string FreeZoneID)
    {
        int numID = Convert.ToInt32(FreeZoneID);
        return PartialView("Partial_CreateNewFreeZone", Q_UOF.GetFreeZoneByID(numID));
    }

    [HttpPost]
    public ActionResult EditFreeZoneByID(FeeZone obj)
    {
        try
        {
            if (ModelState.IsValid)
            {

                Q_UOF.EditSubject(obj);

            }
        }
        catch (DataException)
        {
            ModelState.AddModelError("FeeZone", "Unable to Save Changes.");
        }

        return RedirectToAction("FreeZone");
    }

1 个答案:

答案 0 :(得分:1)

您需要将表单中的主键值发送到Action方法,以便它可以更新正确的记录。为此,您肯定需要将表单中的ID保留在隐藏字段中。

我不确定你的意思&#34;如果你保留隐藏的变量&#34;你就无法创建新记录。我不认为这会成为一个问题。您可以使用相同的HttpPost操作方法来保存新记录并更新现有记录。您可以只检查主键属性的值,如果是0,则添加新记录,否则更新现有记录

[HttpPost]
public ActionResult EditFreeZoneByID(FeeZone obj)
{
  if(obj.FreeZoneID==0)
  {
    //This is a new record. Save it

  }
  else
  {
    //Update an existing record now. 
  }
  // to do : Return somethign valid or redirect
}