0

我在这里有 mvc3 应用程序我的问题在同一页面上,即在Index.cshtml 我有两个部分视图controlpartial.cshtmlwebgridpartial.cshtml

现在,当我将数据插入数据库时​​,它工作正常,页面被重定向到Index.cshtml并且 URL 也变得清晰。

但是在编辑时,当我单击编辑按钮并更新所有值并提交该值时,它已在数据库中完美更新,但页面无法再次重定向到,Index.cshtml也无法清除我的 URL :(

因此,一旦完成编辑,我将无法编辑任何值,需要手动重置索引 URL。

有什么猜测吗?

索引.cshtml

@model Mapping.Models.SecurityIdentifierMappingViewModel

@{
    ViewBag.Title = "Index";
}

指数

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>


@*Partial control for all controls*@

<div id="main">
<div style="float:left;width:30%">
@Html.Partial("_ControlsPartial",Model)
</div>


<div style="margin-left:600px;margin-top:-20px">
@Html.Partial("_WebGridPartial",Model.MappingWebGridList)
</div>

</div>

家庭控制器.cs

  mydataEntities dbContext = new mydataEntities();
    DataRepository objRepository = new DataRepository();
//GET

public ActionResult Index(string userAction="Create",int id = 0 )
{
    var mappingobj = new SecurityIdentifierMappingViewModel();
    mappingobj.MappingWebGridList = dbContext.SecurityIdentifierMappings.ToList();

    if (id!=null && id > 0)
    {

        mappingobj.MappingControls = dbContext.SecurityIdentifierMappings.Find(id);
        if (userAction == "Delete")
        {
            dbContext.SecurityIdentifierMappings.Remove(mappingobj.MappingControls);
            dbContext.SaveChanges();
        }
    }
    else
    {
        mappingobj.MappingControls = new SecurityIdentifierMapping();
        mappingobj.MappingControls.PricingSecurityID = 0;
        mappingobj.MappingControls.CUSIP = "";
    }
    mappingobj.PricingSecurities = objRepository.GetPricingSecurityID();
    mappingobj.CUSIPs = objRepository.GetCUSIP();

    return View(mappingobj);
}


//POST

[HttpPost]
public ActionResult Index(SecurityIdentifierMappingViewModel objModel)
{
      //edit code
     if (objModel.MappingControls.Id > 0)
        {
            if (ModelState.IsValid)
            {
                dbContext.Entry(objModel.MappingControls).State = EntityState.Modified;
                try
                {
                    dbContext.SaveChanges();
                    return RedirectToAction("Index");
                }
                catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                {
                    throw;
                }
            }

        }

        //insert code
        else
        {
            if (ModelState.IsValid)
            {
                dbContext.SecurityIdentifierMappings.Add(objModel.MappingControls);
                try
                {
                    dbContext.SaveChanges();
                    return RedirectToAction("Index");
                }
                catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                {
                    throw;
                }
            }

        }

        objModel.MappingWebGridList = dbContext.SecurityIdentifierMappings.ToList();
        objModel.PricingSecurities = objRepository.GetPricingSecurityID();
        objModel.CUSIPs = objRepository.GetCUSIP();
        objModel.MappingControls = new SecurityIdentifierMapping();

        return View(objModel);

}

4

2 回答 2

2

推荐而不是

return View(objModel);

去做

return RedirectToAction("Index", new {Id = null});

这称为后重定向获取模型 (PRG)。

如果你想保留 objModel。将它放在 TempData 和 Index(Get) 上,以检查 TempData 是否存在对象。使用它而不是加载一个新的。

于 2012-04-18T05:26:21.097 回答
1

您需要在代码中的某处使用 RedirectToAction 才能将其恢复到原始索引。

另外,你做的有点不对。MVC 的全部意义在于您的操作将(大部分)对应于 CRUD。因此,您将有一个编辑操作。您还将拥有创建和删除。显然,你可以有更多或更少甚至不同的动作,但 MVC 的全部意义在于让它更简单,而不是更难。

路由和操作的存在是有原因的,以避免编写单体代码。我强烈建议你看看http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/intro-to-aspnet-mvc-3

尽管看起来您知道 ASP.NET 的基础知识,但 ASP.NET MVC 是有点不同的野兽 :)

于 2012-04-18T05:36:57.893 回答