簡體   English   中英

具有多種模型的ASP.Net MVC

[英]ASP.Net MVC with Multiple Models

視圖:

@model MyApp.Models.Activity

@using (Html.BeginForm("Activity_Details", "Activity", FormMethod.Post))
{
    @Html.ValidationSummary(true)
    @Html.AntiForgeryToken()

    @Html.HiddenFor(model => model.ActivityName)
    @Html.HiddenFor(model => model.ActDate)
    @Html.HiddenFor(model => model.DateAccomplished)

    @Html.HiddenFor(model => model.Participants)

    <div class="body-header">
       <div>
            <h2>Activity Information</h2>
       </div>
       <br />
        <div class="buttons">
            <input type="submit" name="submitButton" value="Save" class="button save icon" />
            <a class="button" href="@Url.Action("Activity_List", "Activity")"><span class="back icon"></span>Back</a>
        </div>
    </div>
    <br />
    <div class="content-wrapper">
       <div class="sub-content">
            <div class="item">
                <span>@Html.DisplayNameFor(model => model.ActivityName)</span>
                @Html.DisplayFor(model => model.ActivityName)
            </div>
            <div class="item">
                <span>@Html.DisplayNameFor(model => model.ActDate)</span>
                @Html.DisplayFor(model => model.ActDate)
            </div>
            <div class="item">
                <span>@Html.DisplayNameFor(model => model.DateAccomplished)</span>
                @Html.DisplayFor(model => model.DateAccomplished)
            </div>
       </div>
       <div class="sub-content">
            <table cellspacing="0">
                <thead>
                    <tr>
                        <th>Last Name</th>
                        <th>First Name</th>
                        <th>Actual Amount</th>
                    </tr>
                </thead>
                <tbody>
                @foreach (var item in Model.Participants)
                {
                    <tr>
                        <td>@item.LastName</td>
                        <td>@item.FirstName</td>
                        <td>@item.Amount</td>
                    </tr>
                }
                </tbody>
            </table>
        </div>
    </div>
}

控制器:

[HttpPost()]
public ActionResult Activity_Details(string submitButton, Activity model)
{
    //AFTER CLICKING THE SUBMIT BUTTON
    //model.Participants doesnt retained its values
    return View(model);
}

public class Activity
{
    public string ActivityName { get; set; }
    public DateTime ActDate { get; set; }
    public DateTime DateAccomplished { get; set; }

    public virtual IEnumerable<Participant> Participants { get; set; }
}

public class Participant
{
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string Amount { get; set; }
}

我有這些模型活動和參與者,它們將顯示在一個視圖中,參與者模型將迭代創建一個表。

我的問題現在是我需要在單擊提交按鈕后更新每個參與者的“金額”,現在發生的是當模型傳遞回ActionResult時...參與者模型為空,只有活動模型有數據。

你需要的是一種叫做列表綁定的東西。 這個:

 @foreach (var item in Model.Participants)
 {
     <tr>
          <td>@item.LastName</td>
          <td>@item.FirstName</td>
          <td>@item.Amount</td>
      </tr>
  }

不發回任何數據。 嘗試:

@for( int i = 0; i < Model.Participants.Count(); ++i)
{
    @Html.HiddenFor(m => m.Participants[i].LastName)
    @Html.HiddenFor(m => m.Participants[i].FirstName)
    @Html.HiddenFor(m => m.Participants[i].Amount)
}

確保i是順序的並且按增量順序,默認的活頁夾很樂意接受它。

您可以應用其他方法,但這是最簡單的方法。

這里有很多錯誤。 首先,您無法將綁定模型綁定到IEnumerable,因為模型綁定器將不知道要實例化哪種實際對象來支持它。 使用List<Participant>Collection<Participant>

其次,你不能將HiddenFor與集合或IEnumerable一起使用。 你只能在那里放一個謹慎的類型。 您需要將列表中的每個參與者寫入單獨的HiddenFor() 這無論如何都可能毫無意義,因為在大多數情況下,無論如何都要在服務器上提供此信息,因此沒有理由將其發布回服務器。 特別是在這里,您要顯示數據,而不是更新它...

如果用戶可以更改數據,或者選擇它,您只需要發回數據(在這種情況下,您只發布選擇機制,例如Id)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM