Как использовать шаблоны редактора MVC3 для списков с добавлением и удалением в представлении Razor? - PullRequest
0 голосов
/ 07 июля 2011

Как использовать шаблоны редактора MVC3 для списков с добавлением и удалением?

У меня есть объект:

public class Policy
{
    public List<PolicyLine> PolicyLines = new List<PolicyLine>();
}

public class PolicyLine
{
    public PolicyLine(bool isPositive, string policyText)
    {
        IsPositive = isPositive;
        PolicyText = policyText;
    }

    public bool IsPositive { get; set; }

    public string PolicyText { get; set; }
}

У меня есть editorTemplate: в Views \ Shared \ EditorTemplates \ Policy.cshtml и Views \ Shared \ EditorTemplates \ PolicyLine.cshmtml, и мне интересно, как разрешить пользователям добавлять и удалять PolicyLines из Policy?

Ответы [ 2 ]

1 голос
/ 16 октября 2011

Я получил это, чтобы работать для меня:

Вот мои Views / Policy / Index.cshtml

@using (Html.BeginForm("Submit", "Policy")) {
<fieldset>
@Html.EditorForModel()
</fieldset>
}

Вот мои Views / Shared / EditorTemplates / Policy.cshtml

@model Policy
<br />
<label for="IsPositive">Is positive?</label>
@Html.CheckBox("IsPositive")
<input type="text" name="PolicyText" />
<input type="submit" value="Add to Policy"  title="SubmitFromReferalPolicy" />
@Html.EditorFor(a => a.PolicyLines)

Вот мои представления / Shared / EditorTemplates / PolicyLine.cshtml

@model PolicyLine
<br />
@this.Model.ToString()
@Html.ActionLink("Delete", "DeleteLine/" + Model.Identifier.ToString())

Вот мои Policy.cs

public class Policy
{
    public string Id { get; set; }

    public List<PolicyLine> PolicyLines = new List<PolicyLine>();

    public override string ToString()
    {
        return PolicyFormatter.FormatPolicy(this);
    }
}

Вот мои PolicyLine.cs

public class PolicyLine
{
    public bool IsPositive { get; set; }

    public string PolicyText { get; set; }

    public Guid Identifier { get; set; }

    public override string ToString()
    {
        return PolicyFormatter.FormatPolicyLine(this);
    }
}

Вот мой метод добавления из PolicyController.cs

    [HttpPost]
    public ActionResult Submit(PolicyLine submitted)
    {
        Policy saveMe = Policy.GetPolicyFromUserName(UserName);
        submitted.Identifier = Guid.NewGuid();
        saveMe.PolicyLines.Add(submitted);
        Store.Write(saveMe);

        return RedirectToAction("Index");
    }

Вот мой метод удаления из PolicyController.cs

    public ActionResult DeleteLine(Guid identifier)
    {
        Policy saveMe = Policy.GetPolicyFromUserName(UserName);
        PolicyLine removeMe = saveMe.PolicyLines.Find(p => p.Identifier == identifier);
        saveMe.PolicyLines.Remove(removeMe);
        Store.Write(saveMe);
        return RedirectToAction("Index");
    }
1 голос
/ 07 июля 2011

Для удаления, просто добавьте следующую строку в PolicyLine.cshtml и добавьте действие «Удалить» в свой контроллер для выполнения удаления.

@Html.ActionLink("Delete", "Delete", new { id = @Model.PolicyID })

ADD немного сложнее, вы можете добавить кнопку в свой Policy.cshtml, а затем вызвать некоторый javascript, чтобы вставить html на лету. ИЛИ ЖЕ Вы можете заставить кнопку отобразить новую страницу, чтобы захватить новую строку политики, а затем вернуться на исходную страницу с добавленной новой строкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...