Как использовать троичный оператор в бритве (в частности, на атрибутах HTML)?

    // Returns true if device has rebooted since last time
    private func deviceRebootedSinceLastTime() -> Bool {
        let userDefaults = NSUserDefaults.standardUserDefaults()
        let systemUptime = NSProcessInfo.processInfo().systemUptime;
        let timeNow = NSDate().timeIntervalSince1970
        let dateOfLastReboot = NSDate(timeIntervalSince1970: timeNow-systemUptime)

        var didDeviceRebootSinceLastTime = false

        if let storedDateOfLastReboot:NSDate = userDefaults.objectForKey("deviceLastRebootDate") as? NSDate {

            if Int(dateOfLastReboot.timeIntervalSinceDate(storedDateOfLastReboot)) < 1 { //
                print("Reboot time didn't change - date: \(dateOfLastReboot)");
            }
            else {
                print("Reboot time has changed - from: \(storedDateOfLastReboot) to \(dateOfLastReboot)");
                didDeviceRebootSinceLastTime = true

            }
        }
        else {
            print("Reboot time is saved for the first time")
            didDeviceRebootSinceLastTime = true // first time we save value
        }

        userDefaults.setObject(dateOfLastReboot, forKey: "deviceLastRebootDate")
        userDefaults.synchronize() // don't forget this!!!

        return didDeviceRebootSinceLastTime;
    }
377
задан Portman 3 November 2010 в 22:16
поделиться

6 ответов

Вы должны быть в состоянии использовать синтаксис выражения @():

<a class="@(User.Identity.IsAuthenticated ? "auth" : "anon")">My link here</a>

У меня не установлена ​​Razor, поэтому я могу ошибаться.

718
ответ дан maxshuty 3 November 2010 в 22:16
поделиться

Приложение:

Важной концепцией является то, что вы оцениваете выражение в своем коде Razor. Лучший способ сделать это (например, если вы находитесь в цикле foreach) - использовать универсальный метод.

Синтаксис для вызова универсального метода в Razor:

@(expression)

В этом случае выражение:

User.Identity.IsAuthenticated ? "auth" : "anon"

Следовательно, решение:

@(User.Identity.IsAuthenticated ? "auth" : "anon")

Этот код можно использовать где угодно в Razor, а не только для атрибута html.

См. Комментарий @Kyralessa к краткому справочнику по синтаксису C # Razor (блог Фила Хаака).

52
ответ дан awrigley 3 November 2010 в 22:16
поделиться

Более простая версия, для легких глаз!

@(true?"yes":"no")
20
ответ дан Monsters X 3 November 2010 в 22:16
поделиться

Для тех из вас, кто использует ASP.net с бритвой VB, также возможен троичный оператор.

Оно также должно быть внутри выражения бритвы:

@(Razor_Expression)

и троичный оператор работает следующим образом:

If(BooleanTestExpression, "TruePart", "FalsePart")

Тот же самый пример кода, показанный здесь с бритвой VB выглядит следующим образом:

<a class="@(If(User.Identity.IsAuthenticated, "auth", "anon"))">My link here</a>

Примечание: при написании TextExpression помните, что логические символы не одинаковы между C # и VB.

17
ответ дан John Saunders 3 November 2010 в 22:16
поделиться

В моей задаче я хочу, чтобы текст привязки <a>text</a> внутри моего представления основывался на некотором значении, и этот текст извлекается из App string Resources

, поэтому это @() является решением

]
<a href='#'>
      @(Model.ID == 0 ? Resource_en.Back : Resource_en.Department_View_DescartChanges)
</a>

, если текст не из App string Resources, используйте это

@(Model.ID == 0 ? "Back" :"Descart Changes")
0
ответ дан Basheer AL-MOMANI 3 November 2010 в 22:16
поделиться

Вы также можете использовать этот метод:

<input type="text" class="@(@mvccondition ? "true-class" : "false-class")">

Попробуйте это .. Удачи Спасибо.

0
ответ дан Arjun 3 November 2010 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: