0

私はここにmvc3アプリケーションを持っています私の問題は同じページにありますつまりIndex.cshtml 私は2つの部分的なビューcontrolpartial.cshtmlを持っていますwebgridpartial.cshtml

これで、データベースにデータを挿入すると正常に機能し、ページがリダイレクトされIndex.cshtml、URLも明確になります。

しかし、編集時に編集ボタンをクリックしてすべての値を更新し、その値を送信すると、データベースで完全に更新されますが、ページを再度リダイレクトすることIndex.cshtmlも、URLがクリアされることもありません:(

そのため、編集を行った後は値を編集できず、インデックスURLを手動でリセットする必要があります。

何か推測はありますか?

Index.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>

HomeController.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});

これは、Post-Redirect-Get モデル (PRG) と呼ばれます。

objModel を保持したい場合。TempData と Index(Get) に配置して、TempData にオブジェクトがあるかどうかを確認します。新しいものをロードする代わりにそれを使用するには。

于 2012-04-18T05:26:21.097 に答える
1

元のインデックスに戻すには、コードのどこかに RedirectToAction が必要です。

さらに、あなたはそれを少し間違っています。MVC の要点は、アクションが (ほとんど) CRUD に対応することです。したがって、編集アクションがあります。Create と Delete もあります。明らかに、多かれ少なかれ異なるアクションを使用することもできますが、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 に答える