2016-03-29 8 views
0

Ich bin noch neu bei MVC, aber wirklich neugierig darauf. Ich habe meine create view-Funktion, aber ich war überrascht, warum ich neue Daten, die ich erstellt habe, nicht wieder in meinem Index anzeigen kann?Wie Funktion hinzufügen/erstellen in MVC und aktualisieren Sie es in Index?

hier ist mein Controller:

 //GET /UserActivity/Create 
    public ActionResult Create() 
    { 
     UserActivityModels ua = new UserActivityModels(); 
     return View(userActivity); 
    } 


    // 
    // POST: /UserActivity/Create 
    [HttpPost] 
    public ActionResult Create(FormCollection formCollection) 
    { 
     try 
     { 
      UserActivityModels ua = new UserActivityModels(); 


      ua.Id = Int32.Parse(formCollection["Id"]); 
      ua.CreatedBy = Int32.Parse(formCollection["CreatedBy"]); 
      ua.CreatedOn = DateTime.Parse(formCollection["CreatedOn"]); 
      ua.ModifiedBy = Int32.Parse(formCollection["ModifiedBy"]); 
      ua.ModifiedOn = DateTime.Parse(formCollection["ModifiedOn"]); 
      ua.ContactId = formCollection["ContactId"]; 
      ua.StatusCode = Int32.Parse(formCollection["StatusCode"]); 
      ua.StateCode = Int32.Parse(formCollection["StateCode"]); 
      ua.EntityName = formCollection["EntityName"]; 
      ua.EntityId = Int32.Parse(formCollection["EntityId"]); 
      ua.ActivityType = Int32.Parse(formCollection["ActivityType"]); 
      ua.ActivityStatus = formCollection["ActivityStatus"]; 

      ua.DueDate = DateTime.Parse(formCollection["DueDate"]); 

      ua.ActualEndDate = DateTime.Parse(formCollection["ActualEndDate"]); 

      ua.MasqueradeOn = DateTime.Parse(formCollection["MasqueradeOn"]); 

      ua.MasqueradeBy = Int32.Parse(formCollection["MasqueradeBy"]); 


      return RedirectToAction("Index"); 
     } 

     catch 
     { 
      return View("Index"); 
     } 
    } 

das Modell:

public class UserActivityModels 
{ 
    public int Id { get; set; } 

    public DateTime CreatedOn { get; set; } 

    public int CreatedBy { get; set; } 

    public int ModifiedBy { get; set; } 

    public DateTime ModifiedOn { get; set; } 

    public string ContactId { get; set; } 

    public string EntityName { get; set; } 

    public int EntityId { get; set; } 

    public int StatusCode { get; set; } 

    public int StateCode { get; set; } 

    public int ActivityType { get; set; } 

    public string ActivityStatus { get; set; } 

    public DateTime DueDate { get; set; } 

    public DateTime ActualEndDate { get; set; } 

    public DateTime MasqueradeOn { get; set; } 

    public int MasqueradeBy { get; set; } 

    public string ContactName { get; set; } 

    //public int TotalCount { get; set; } 

    // public List<string> userActivity { get; set; } 

} 

Was mich jemand könnte sagen, warum, wenn ich „Eintragen“ klicken, die neu erstellten Daten nun im Index zeigt, ? Dank

und hier ist die Ansicht/Index:

  @{ 
    ViewBag.Title = "Index"; 
    Layout = "~/Views/Shared/_LayoutMain.cshtml"; 

    } 

    <h2>Index</h2> 

     @*<p> 
    @Html.ActionLink("Create New", "Create") 
</p>*@ 

    <h3>User Activity</h3> 
     @using (Html.BeginForm("index", null, FormMethod.Get)) 
     { 
<div class="row"> 

    <div class="col-sm-8"> 
     <div class="input-group"> 

      <input type="text" 
        name="filter" 
        value="@ViewBag.filter" 
        class="form-control" 
        style="display: inline" 
        placeholder="Search by Contact Name or Entity Name" /> 
      <span class="input-group-btn"> 
       <button class="btn btn-default" type="submit">Go</button> 
      </span> 

     </div> 
    </div> 
    <div class="pull-right col-lg-1"> 
     <a class="btn btn-success" data-modal="" href="/UserActivity/Create" id="btnCreate"> 
      <span class="glyphicon glyphicon-plus"></span> 
     </a> 
    </div> 
</div> 

<div class="table-responsive" style="margin-top:5px;"> 
    @{ 
     var grid = new WebGrid(
        Model, 
        canPage: true, 
        rowsPerPage: 5, 
        canSort: true); 
     //ajaxUpdateContainerId: "grid"); 

    //grid.Bind(Model, rowCount: (int)ViewData["totalCount"], autoSortAndPage: false); 

     grid.Pager(WebGridPagerModes.All); 

     @grid.GetHtml(
     htmlAttributes: new { id = "grid" }, 
    // id for ajaxUpdateContainerId parameter 
    fillEmptyRows: false, 
    tableStyle: "table table-striped", 
    mode: WebGridPagerModes.All, 
    columns: grid.Columns(
     //grid.Column("Id", "Id"), 
     grid.Column("Id", "Id", style: "col-lg-1", canSort: true), 
     grid.Column("CreatedBy", "CreatedBy", style: "col-lg-6"), 
     grid.Column("CreatedOn", header: "CreatedOn", style: "col-lg-2", canSort: true), 
     grid.Column("ModifiedBy", header: "ModifiedBy", style: "col-lg-2"), 
     grid.Column("ModifiedOn", header: "ModifiedOn", style: "col-lg-2"), 
     grid.Column("ContactId", header: "ContactId", style: "col-lg-2"), 
     grid.Column("EntityName", header: "EntityName", style: "col-lg-2"), 
     //grid.Column("EntityName", "EntityName", style: "col-lg-1", canSort: true), 
     grid.Column("EntityId", header: "EntityId", style: "col-lg-2"), 
     grid.Column("StatusCode", header: "StatusCode", style: "col-lg-2"), 
     grid.Column("StateCode", header: "StateCode", style: "col-lg-2"), 
     grid.Column("ActivityType", header: "ActivityType", style: "col-lg-2"), 
     grid.Column("ActivityStatus", header: "ActivityStatus", style: "col-lg-2"), 
     grid.Column("DueDate", header: "DueDate", style: "col-lg-2"), 
     grid.Column("ActualEndDate", header: "ActualEndDate", style: "col-lg-2"), 
     grid.Column("MasqueradeOn", header: "MasqueradeOn", style: "col-lg-2"), 
     grid.Column("MasqueradeBy", header: "MasqueradeBy", style: "col-lg-2"), 
     grid.Column("ContactName", header: "ContactName", style: "col-lg-2"), 
     //grid.Column("ContactName", "ContactName", style: "col-lg-1", canSort: true), 



     grid.Column(header: "Action", canSort: false, style: "action", 
format: @<text> 
     @Html.Raw("<a data-modal='' href='/UserActivity/Details/" + item.Id + "' id='" + item.Id + "' title='Detail'> <span class='glyphicon glyphicon-search'> </span> </a>") 
     @Html.Raw("<a data-modal='' href='/UserActivity/Edit/" + item.Id + "' id='" + item.Id + "' title='Edit'> <span class='glyphicon glyphicon-edit'> </span> </a>") 
     @Html.Raw("<a data-modal='' href='/UserActivity/Delete/" + item.Id + "' id='" + item.Id + "' title='Delete'> <span class='glyphicon glyphicon-trash'> </span> </a>") 
</text>) 

    )); 
    } 

</div> 
     } 

+0

Was 'Index()'? Und warum hast du 'View (" Index ");' im 'catch' Block. Und bitte gehen Sie auf die MVC-Site und arbeiten Sie durch die Tutorials, um die Grundlagen zu lernen. Die POST-Methode sollte 'UserActivityModels-Modell' sein, nicht' FormCollection formCollection' (Sie sollten nie 'FormCollection' verwenden). Und nirgendwo speichern Sie jemals die Daten! –

+0

Der Index hier bedeutet für ~/Views/Shared/Index. In create.cshtml möchte ich also neue Daten erstellen, die dann in der Datenbank gespeichert werden, und die neuen Daten in Index anzeigen, wenn auf die Schaltfläche "Senden" geklickt wird. Ich frage mich, warum die neuen Daten nicht in db gespeichert werden? und ich stelle die create.cshtml in der Frage schon @StephenMuecke – Botski

+0

Nirgends in der 'Create' POST-Methode speichern Sie die Daten jemals irgendwo. Wie würden Sie erwarten, dass es angezeigt wird, wenn Sie eine andere Methode umleiten (eine Methode, die Sie noch nicht einmal gezeigt haben!). Gehe zur MVC Seite und lerne die Grundlagen –

Antwort

0

In Ihrer Index Methode, würden Sie das Modell, das Sie in der Create Methode erstellt abrufen müssen, und verwenden, die als Argument, wenn die Ansicht zurückgeben.

Eine Möglichkeit, ein Modell von einer Controller-Methode an eine andere zu übergeben, ist die Verwendung des TempData Wörterbuchs.

Also, was können Sie tun, ist dies: In Ihrer Create Methode, kurz vor return RedirectToAction("Index"); Aufruf, speichern Sie Ihr Modell in TempData:

TempData["MyModel"] = ua; 

Dann wird in der Index Methode, rufen Sie das Modell aus TempData und es passiert in die Ansicht:

var myModel = (UserActivityModels)TempData["MyModel"]; 

return View(myModel); 
+0

Ich versuchte, Mate. Aber es stellt sich heraus, dass ein Problem mit dem Datagrid vorliegt. Der Fehler lautete: "Eine Datenquelle muss gebunden sein, bevor diese Operation ausgeführt werden kann." irgendeine Idee wie? :( – Botski

+0

Sie müssen vielleicht eine andere Frage dafür öffnen. Aber, können Sie mir sagen, wo Sie ein Datenraster verwenden? In der Indexansicht? Ich dachte, Sie verwenden HTML-Helfer ('EditorFor',' LabelFor', etc .)? –

+0

Ja, ich verwende Datagrid im Index. Ich habe meinen Index zu der Frage aktualisiert. Danke – Botski